Экспорт класса, импортированного из другого модуля

Я экспериментирую с модулями 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;

для этого есть два предостережения:

  1. Первая форма всегда должна использовать полное имя (потому что синтаксис был введен давно, чтобы копировать имена между пространствами имен).
  2. Сначала вы должны иметь возможность использовать импортированное имя, что не относится к вашему примеру, потому чтоroot.heheне экспортировал. (Для подхода псевдонима типа достаточно иметь возможность назвать его черезdecltype или так.)

Вы также можете использовать export import root.hehe;для реэкспорта всего, что экспортировано импортируемым модулем. Синтаксиса импорта с подстановочными знаками нет: имена модулей с точками не имеют никакой семантики (в C++20).

Другие вопросы по тегам