Поддержка модулей C ++ 20 недавно была добавлено в MSVC 16.8. Если я не ошибаюсь, одним из преимуществ использования модулей является то, что теперь поддерживаются циклические зависимости импорта. Однако следующий тестовый проект по-прежнему не может быть скомпилирован в последней версии компилятора Microsoft.
computer.ixx
export module computer;
import printer;
export struct Computer {
Printer* printer;
};
printer.ixx
export module printer;
import computer;
export struct Printer {
Computer* computer;
};
main.cpp
import computer;
import printer;
int main() {
Computer* c = new Computer();
Printer* p = new Printer();
p->computer = c;
c->printer = p;
}
Попытка скомпилировать этот код приводит к: MultiToolTask has encounted an issue scheduling task because one or more tasks still remains but none could be started. Please check the inputs and their dependency to avoid cirular loops.
(дословно воспроизводятся опечатки) и сбивает с толку IntelliSense, зависание или даже сбой Visual Studio.
Я также пробовал инвертировать порядок строк импорта и экспорта, что не устранило проблему.
Я знаю, что это все еще бета-функция, но я хочу убедиться, что мои предположения верны (что этот код должен работать) и если что-то не так в коде, что я должен изменить, чтобы он работал.
Если вы хотите попробовать это самостоятельно, вы можете найти проект MSVC, содержащий приведенный выше код, здесь: https://github.com/albertvaka/ModulesTest
import B;
иimport A;
соответственно, но не модули интерфейса. Здесь вам нужно объединить модули (поскольку ни один из них не имеет смысла без другого). - person Davis Herring   schedule 22.11.2020