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

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

Сообщение Anonymous »

  • Я делаю игровой двигатель в C ++, используя модули из C ++ 20. < /li>
    Используя основной пример, двигатель структурирован так: содержит уникальный_ptr в классе B , класс B содержит регулярный указатель на класс A и уникальный), где каждый содержит уникальный_ptr для более низких уровней и регулярный указатель на более высокие. /> Когда функция члена такого объекта, как C , пытается назначить c* d , я получаю еще одну ошибку, которая (перефразирование) говорит, что типы различны из -за правила одного определения (ODR)
Здесь минимум воспроизводимый пример только с тремя классами и C, и C, и C, и C, и C, и C, и C, и C, и C, и C, и C, и C, и C, и C).// main.cpp
#include

import A;
import B;
import C;

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

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

#include

class A;

export module B;

import C;

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

A* a;

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

class B;

export module C;

export class C {
public:
B* b;

int value;
};
< /code>
And a list of things I've tried:
  • Forward definition in the global module fragment of each module
  • Forward definition in each module
  • Exporting the forward definition in each module
  • Placing forward definitions in a header
  • Placing forward definitions in an extra module
  • Just using headers (works, but I'd rather not)
  • Importing all modules (cries about circular dependancies)
  • Putting the function definitions into a seperate .cpp file
I should be able to just put all three in one module, but that file would be very unreadable with the full definitions of the classes.

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

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

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

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

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

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