到目前为止,我可以对Visual Studio 2015中的C++模块做些什么?(使用实验开关)

What can I do with C++ modules in Visual Studio 2015 so far? (using the experimental switch)

本文关键字:做些什么 开关 实验 模块 C++ 我可以 Visual Studio 中的 2015 到目前为止      更新时间:2023-10-16

所以我看了一段在"Visual Studio 2015 Update 1"中显示新闻的视频,他们提到了实验性的C++模块支持(大约8分钟)。

此版本实际支持多少此功能?

如果有人能展示一些与Visual Studio/实验开关配合使用的代码示例,我会很高兴的,这样我就可以开始玩了。

以下是如何根据@dxiv答案中链接的视频中的说明,获得一个使用Update 1 RTM的简单示例。

首先,模块定义文件mine.ixx。用:cl /c /experimental:module mine.ixx编译。这将使mine.objmine.ifc:

module mine;
export
{
  int sum(int x, int y);
}
int sum(int x, int y) { return x + y; }

下一个使用该模块的main.cpp,使用cl /c /experimental:module main.cpp进行编译。这将使main.obj:

#include <iostream>
import mine;
int main()
{
  std::cout << sum(2000, 15) << std::endl;
  return 0;
}

然后将这些链接到link *.obj,您应该会得到一个main.exe

请注意,目前在VS内部,这并不能很好地工作,因为它不理解模块强加的排序要求——你必须手动修改你的项目文件才能做到这一点。

请参阅2015年CppCon关于Gabriel Dos Reis"带模块的大规模C++:你应该知道什么"的演示https://www.youtube.com/watch?v=RwdQA0pGWa4.

发件人http://nibblestew.blogspot.com/2015/10/some-comments-on-c-modules-talk.html:

模块的使用方式(在演示中大约40分钟)有一个令人讨厌的怪癖。基本方法是有一个源文件foo.cpp,它定义了一个模块Foobar。要编译这个,你应该这样说:

cl-c/模块foo.cxx

导致编译器输出foo.o和Foobar.ifc,后者包含模块的二进制定义。要使用它,您需要编译第二个源文件,如下所示:

cl-c baz.cpp/module:reference Foobar.ifc

这基本上与Fortran处理模块的方式相同[…]

在VS2015 Update 1 RTM中,请改用/experimental:module /module:import