到目前为止,我在Visual Studio 2015中如何处理C ++模块? (使用实验开关)

时间:2015-11-22 19:26:50

标签: c++ visual-studio-2015

所以我正在查看video在Visual Studio 2015 Update 1'中展示新闻。他们提到了实验性的C ++模块支持(约8分钟)。

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

我很乐意,如果有人会展示某种与Visual Studio /实验开关一起使用的代码示例,那么我就可以开始使用它了。

3 个答案:

答案 0 :(得分:7)

https://www.youtube.com/watch?v=RwdQA0pGWa4上查看CppCon 2015年Gabriel Dos Reis演示文稿“带模块的大型C ++:您应该知道的内容”。

来自http://nibblestew.blogspot.com/2015/10/some-comments-on-c-modules-talk.html

  

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

     

cl -c / module foo.cxx

     

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

     

cl -c baz.cpp / module:参考Foobar.ifc

     

这与Fortran执行其模块[...]

的方式基本相同

答案 1 :(得分:7)

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

首先,模块定义文件mine.ixx。用以下代码编译:{{1​​}}。这将使cl /c /experimental:module mine.ixxmine.obj

mine.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

请注意,目前这在VS内部并不能很好地工作,因为它不了解模块所施加的排序要求 - 您必须手动修改项目文件才能执行此操作此

答案 2 :(得分:1)

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