Visual Forward объявления в модулях C ++ (MSVC)

В последнее время я экспериментировал с реализацией модулей, предоставленных MSVC, и столкнулся с интересным сценарием. У меня есть два класса, которые имеют взаимную зависимость в своих интерфейсах, что означает, что мне придется использовать предварительные объявления, чтобы заставить его компилироваться. Следующий код показывает пример:

Module interface

export module FooBar;

export namespace FooBar {
class Bar;

class Foo {
public:
Bar createBar();
};

class Bar {
public:
Foo createFoo();
};
}

Module implementation

module FooBar;

namespace FooBar {
Bar Foo::createBar() {
return Bar();
}

Foo Bar::createFoo() {
return Foo();
}
}

Теперь я хотел бы разделить эти два класса на их собственные модули с именем Foo а также Bar, Однако каждый модуль должен импортировать другой, так как их интерфейсы зависят друг от друга. И согласно предложение модулей в настоящее время импорт кругового интерфейса не разрешен. Эта статья предлагает использовать proclaimed ownership декларации, но кажется, что это еще не реализовано в реализации модулей MSVC.

Поэтому я прав, полагая, что эта ситуация в настоящее время не может быть решена с использованием текущей реализации, как это предусмотрено MSVC? Или есть какая-то альтернатива, которую мне не хватает? В этом сценарии ситуация довольно тривиальна, однако я столкнулся с этой проблемой при модульной библиотеке, которая имеет много классов, имеющих такие зависимости. Я понимаю, что циклические зависимости часто являются признаком плохого дизайна, однако в некоторых случаях они неизбежны или трудны для рефакторинга.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector