Я экспериментирую с модулями C++, используя clang 5.0, и пытаюсь понять, как я могу экспортировать из одного модуля то, что я импортировал из другого модуля. Это вообще возможно?
Например, хотелось бы иметь что-то вроде этого:
// root.hehe.cppm
export module root.hehe;
class hehe
{
};
и это:
// root.cppm
export module root;
import root.hehe;
export class hehe; // ... doesn't work!
export hehe; // Also doesn't work!
export import root.hehe; // No dice!
Так что, в конце концов, я могу сделать что-нибудь вроде
import root;
// ...
hehe myhehe;
Возможно ли такое? Я также попытался выяснить, есть ли способ импортировать все подмодули root, например import root.*, но это тоже не сработало.





В C++ 20 (не в любой версии прототипа в Clang) вы можете использовать любой из
export using ::hehe;
export using hehe=hehe;
для этого нужно сделать два предостережения:
root.hehe не экспортировал его. (Для подхода с псевдонимом типа достаточно иметь возможность назвать его через decltype или около того.)Вы также можете использовать export import root.hehe; для повторного экспорта все, экспортированного импортируемым модулем. Синтаксиса импорта с подстановочными знаками нет: имена модулей с точками вообще имеют нет семантики (в C++ 20).
По старому проекту
export module <module>должен нормально работать. В новом проекте он был изменен наexport import <module>. Но это WIP, так что ...