1

但是,由于在 C++20 中将模块引入 C++,因此 std 库本身在 C++23 之前不能作为模块导入。

我想编写这样的代码,import std.core;所以我尝试制作自己的 std 库,只需从std::.

文件 stdcore.mpp 如下所示:

module;
#include <string>
#include <string_view>

export module stdcore;

// This function will never be used.
// it only exports std::string and std::string_view.
export void __105aw1d065adw__(std::string,
    std::string_view); 

和 main.cxx:

import stdcore;

int main()
{
    std::string s{"Hello world!"};
    return 0;
}

用这些编译它们:

CXX="clang++ -fmodules-ts -std=c++20 -Wall"
$CXX --precompile -x c++-module stdcore.mpp

一切看起来都很好,但是当我执行此操作时:

$CXX main.cxx -c -fmodule-file=stdcore.pcm

我有:

main.cxx:5:2: error: missing '#include <string>'; 'std' must be declared before it is used
        std::string s{"Hello world!"};
        ^
E:\msys64\mingw64\include\c++\10.2.0\string:117:11: note: declaration here is not visible
namespace std _GLIBCXX_VISIBILITY(default)
          ^
1 error generated.

这意味着什么?

4

1 回答 1

2
// This function will never be used.
// it only exports std::string and std::string_view.
export void __105aw1d065adw__(std::string, std::string_view); 

不,您只导出该函数,std::string/std::string_view不导出。

相反,它应该是这样的:

export module stdcore;

export import <string>;
export import <string_view>;
// ...
于 2021-03-04T12:16:31.930 回答