如何不使用 `export` 关键字从模块中导出函数和 类?

How to export functions and classes from module not using `export` keyword?

我正在研究在我的宠物项目中使用 C++ 模块 TS 的机会。对我来说,一个重要的用例是包装遗留 headers.

假设我有一个 header 文件,其中包含一些函数和 类、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 关键字来解决此问题,但这对于包装遗留 headers.

的用例来说是不可能的

我做错了什么?如何从 header?

导出所有可能的标识符

我认为有两点是错误的:

  1. 模块名称不能以std.开头。当我尝试这样做时,出现错误

    error C3674: could not find standard library module 'std.io'
    

    如果您没有为 Visual Studio 安装标准库模块组件,则可能不会出现此错误。不过我不确定。

  2. 在您链接到的博客 post 中,有这样一条注释:

    Note that you currently have to include your header in a .cpp file (or rename your header) because of a limitation in our compiler’s file handling.

    确实如此,因为当我尝试使用扩展程序 ixx 时,我遇到了与您相同的错误。

但在解决以上两个问题后,它工作正常。