3

我正在尝试使用 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, like的所有子模块import root.*,但这也不起作用。

4

1 回答 1

1

在 C++20(不是 Clang 中的任何原型版本)中,您可以使用

export using ::hehe;
export using hehe=hehe;

要做到这一点,有两个警告:

  1. 第一种形式必须始终使用限定名称(因为很久以前就引入了用于在名称空间之间复制名称的语法)。
  2. 您必须首先能够使用您导入的名称,这在您的示例中不是这种情况,因为root.hehe没有导出它。(对于类型别名方法,能够通过decltype左右命名就足够了。)

您还可以使用export import root.hehe;重新导出由正在导入的模块导出的所有内容。没有通配符导入语法:带点的模块名称没有任何语义(在 C++20 中)。

于 2020-02-22T20:21:29.563 回答