Как я могу сгладить круглую зависимость, используя модули C ++ 20?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как я могу сгладить круглую зависимость, используя модули C ++ 20?

Сообщение Anonymous »

Мой игровой двигатель в C ++ с использованием модулей от C ++ 20. Класс A содержит уникальный_ptr класса B , класс B содержит регулярный указатель на класс a и unique_ptr к классу c , и эта структура продолжается для 4 уровней (), где каждый содержит уникальный_ptr для более низких уровней и регулярный указатель на более высокие. Когда функция члена такого объекта, как C , пытается назначить c* d я получаю еще одну ошибку, что типы различны из -за правила одного определения (ODR).
Самый низкий класс предназначен для переоценки, чтобы включить фактический код (фактический код (

Код: Выделить всё

class C_Override
). Пример с просто классами A , b и c :
// main.cpp
#include

import A;
import B;
import C;
import C_Override;

int main() {
A a(3);
a.Create_B();
a.b->Create_C();

std::cout a = this;
}
};
< /code>
// B.cppm
module;

class A;

export module B;

import ;
import ;
import C;

export class B {
public:
std::vector c;

A* a;

template
void Create_C() {
c.push_back(std::make_unique());
c.back()->b = this;
c.back()->value = a->value;
}
};
< /code>
// C.cppm
module;

class B;

export module C;

export class C {
public:
B* b;

int value;

virtual void Do_Something() = 0; // This function will be overloaded
};
< /code>
export module C_Override

import ;

export class C_Override {
public:
void Do_Something() override {
std::cout

Подробнее здесь: https://stackoverflow.com/questions/797 ... 20-modules
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»