我正在尝试将 Visual Studio 2017 的实验模块内容与模块中的模板一起使用。这是我正在尝试制作的模块的简化示例
// MyModule.ixx
module MyModule;
export
{
template<typename T>
struct Struct_1
{
T value;
}
template<typename T>
struct Struct_2
{
union
{
T data[1];
Struct_1<T> x;
};
}
}
这就是我尝试使用模块和模板结构的方式
// main.cpp
import std.core;
import MyModule;
int main(int argc, char* argv[])
{
Struct_2<float> s;
std::cout << s.data[0];
return 0;
}
编译给出以下信息:error C2079: 'Struct_2::x' uses undefined struct 'Struct_1<T>
我知道模块是一个实验性功能,但是,当不使用模块时,定义这样的结构可以正常工作。它说Struct_1<T>
未定义,这是否意味着我需要以某种方式显式实例化模板?
我的编译器命令行如下所示:
cl /utf-8 /experimental:module MyModule.ixx /std:c++latest /W3 /Zi /MDd /EHsc main.cpp /link /OUT:test.exe /INCREMENTAL:NO
任何帮助表示赞赏。
更新
我认为这是某种 MSVC 编译器错误。我使用 Clang 编译了相同的代码,它工作正常。Clang 模块文件看起来和上面一样,除了文件扩展名是 .cppm 并且在顶部它有:
export module MyModule;
我的编译器命令行如下所示:
clang++ -fmodules-ts --precompile MyModule.cppm -o MyModule.pcm
clang++ -fmodules-ts -fprebuilt-module-path=. main.cpp
在使用模块之前等待 MSVC 编译器成熟一点可能是个好主意,但如果有人暂时知道解决这个问题的方法,我会很感兴趣。
谢谢