Впередные объявления в модулях C ++ (MSVC)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Впередные объявления в модулях C ++ (MSVC)

Сообщение Anonymous »

Я в последнее время экспериментировал с реализацией модулей в соответствии с 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
Ответить

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

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

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

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

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