Я в последнее время экспериментировал с реализацией модулей в соответствии с MSVC, и я сталкивался с интересным сценарием. У меня есть два класса, которые имеют взаимную зависимость в своих интерфейсах, что означает, что мне придется использовать форвардные объявления, чтобы заставить их компилировать. В следующем коде показан пример: < /p>
Код: Выделить всё
Module interface< /code> < /p>
export module FooBar;
export namespace FooBar {
class Bar;
class Foo {
public:
Bar createBar();
};
class Bar {
public:
Foo createFoo();
};
}
< /code>
Module implementation< /code> < /p>
module FooBar;
namespace FooBar {
Bar Foo::createBar() {
return Bar();
}
Foo Bar::createFoo() {
return Foo();
}
}
< /code>
Now I would like to split these two classes up into their own modules named Foo
и bar . Однако каждый модуль должен импортировать другой, поскольку их интерфейсы зависят друг от друга. И в соответствии с предложением модулей в настоящее время импорт круговых интерфейсов не допускается. Эта статья предлагает использовать провозглашенное заявление < /code>, но кажется, что это еще не реализовано в реализации MSVC модулей. Или мне не хватает альтернативы? В этом сценарии ситуация довольно тривиальная, однако я столкнулся с этой проблемой, модульной библиотеки, в которой есть много классов, которые имеют такие зависимости. Я понимаю, что круговые зависимости часто являются признаком плохого дизайна, однако в некоторых случаях они неизбежны или трудно рефакторировать.
Подробнее здесь:
https://stackoverflow.com/questions/513 ... dules-msvc