gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:15:17 24 4
gpt4 key购买 nike

我正在调查在我的宠物项目中使用 C++ 模块 TS 的机会。对我来说,一个重要的用例是包装遗留 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。然后我在另一个源文件 ma​​in.cxx 中使用这个模块:

import std.io;

int main()
{
f(5);
}

使用以下命令编译:

cl /c /experimental:module main.cxx

编译时出现以下错误:

main.cxx(5): error C3861: 'f': identifier not found

因此,正如我们所见,模块中的标识符未导出。我可以通过在每个要导出的标识符之前手动添加 export 关键字来解决此问题,但这对于包装旧 header 的用例来说是不可能的。

我做错了什么?如何从 header 中导出所有可能的标识符?

最佳答案

我认为有两点是错误的:

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

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

    如果您尚未安装 Visual Studio 的标准库模块组件,则可能不会出现此错误。不过,我不确定这一点。

  2. 在您链接到的博客文章中,有这条注释:

    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 时,我遇到了与您相同的错误。

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

关于c++ - 如何不使用 `export` 关键字从模块导出函数和类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43167449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com