【发布时间】:2017-08-27 07:19:58
【问题描述】:
我正在研究在我的宠物项目中使用 C++ Modules TS 的机会。对我来说,重要的用例之一是包装遗留标头。
假设我有一个包含一些函数和类的头文件,std.io.ixx:
int f(int x)
{
return 2 + x;
}
根据this article,我使用以下命令编译模块:
cl /c /experimental:module /module:name std.io /module:export std.io.ixx
这给了我一个新文件std.io.ifc。然后我在另一个源文件 main.cxx 中使用这个模块:
import std.io;
int main()
{
f(5);
}
使用以下命令编译:
cl /c /experimental:module main.cxx
编译时出现以下错误:
main.cxx(5): error C3861: 'f': identifier not found
所以,正如我们所见,模块中的标识符没有被导出。我可以通过在要导出的每个标识符之前手动添加 export 关键字来解决此问题,但这对于包装旧标头的用例是不可能的。
我做错了什么?如何从标头中导出所有可能的标识符?
【问题讨论】:
标签: c++ module visual-studio-2017 c++20 c++-modules