我试图将 C++ 命名空间公开给包含该 C++ 模块的任何内容。通常在头文件中我只需编写using namespace x::y::z;
它就可以工作。我无法让它从模块中工作。
我正在使用 Visual Studio 2022 和 MSVC v143,最新的 C++。
在当前的标准草案\xc2\xa7 10.2 [module.interface]中,我们看到:
\nexport using namespace N; // error: does not declare a name\n
Run Code Online (Sandbox Code Playgroud)\n在同一部分中,也有非命名空间的正确导出using
声明的正确导出
export using T = S; // OK, exports name T denoting type S\n
Run Code Online (Sandbox Code Playgroud)\n我相信命名空间别名也应该起作用
\nexport namespace N = M;\n
Run Code Online (Sandbox Code Playgroud)\n区别在于,该using namespace
指令为非限定查找提供了一个隧道,以在其自然范围之外进行搜索,但不声明任何新名称。using 声明和命名空间别名都会声明新名称,并且这些名称应该是可导出的。
具体来说,其中任何一个都应该有效:
\nexport using float3 = linalg::aliases::float3; // for each type\nexport namespace la = linalg::aliases; // or just provide a short name\n
Run Code Online (Sandbox Code Playgroud)\n