Экспорт класса, импортированного из другого модуля
Я экспериментирую с модулями 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.*
, но это тоже не сработало.
0 ответов
В C++20 (не в любой версии прототипа в Clang) вы можете использовать любой из
export using ::hehe;
export using hehe=hehe;
для этого есть два предостережения:
- Первая форма всегда должна использовать полное имя (потому что синтаксис был введен давно, чтобы копировать имена между пространствами имен).
- Сначала вы должны иметь возможность использовать импортированное имя, что не относится к вашему примеру, потому что
root.hehe
не экспортировал. (Для подхода псевдонима типа достаточно иметь возможность назвать его черезdecltype
или так.)
Вы также можете использовать export import root.hehe;
для реэкспорта всего, что экспортировано импортируемым модулем. Синтаксиса импорта с подстановочными знаками нет: имена модулей с точками не имеют никакой семантики (в C++20).