到目前为止,我可以对Visual Studio 2015中的C++模块做些什么?(使用实验开关)
What can I do with C++ modules in Visual Studio 2015 so far? (using the experimental switch)
所以我看了一段在"Visual Studio 2015 Update 1"中显示新闻的视频,他们提到了实验性的C++模块支持(大约8分钟)。
此版本实际支持多少此功能?
如果有人能展示一些与Visual Studio/实验开关配合使用的代码示例,我会很高兴的,这样我就可以开始玩了。
以下是如何根据@dxiv答案中链接的视频中的说明,获得一个使用Update 1 RTM的简单示例。
首先,模块定义文件mine.ixx
。用:cl /c /experimental:module mine.ixx
编译。这将使mine.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
,您应该会得到一个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
。
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- 我能做些什么来跟踪矢量元素?
- 我可以做些什么来改进指针向量中的此搜索?
- 我需要做些什么才能使用C++构建茧
- 我可以做些什么来提高内存搜索速度?
- 我能对 GNU ld 'legacy __sync_synchronize'警告做些什么?
- 我能做些什么"missing ; before X"一连串的错误?
- 我还能做些什么来改善此C 代码
- 内部编译器错误消息意味着什么,我能做些什么
- 我必须做些什么才能在编译器优化的代码中调用函数
- 对于 DirectX 11,我可以做些什么来不计算每个渲染()中的缓冲区
- 一个计算机专业二年级的学生能做些什么,这在未来可能会被认为是有价值的
- C++STL容器毫无例外地是不可用的,我们能做些什么呢
- 我包括了“SDL_TTF.h”.我还应该对SDT真正类型的字体工作做些什么
- 我需要做些什么才能使odeint集成函数在另一个类中编译
- LNK2005,我不知道我能做些什么来解决这个问题
- 我能做些什么来加速这个代码(字符串相似性)
- 到目前为止,我可以对Visual Studio 2015中的C++模块做些什么?(使用实验开关)
- gcc会自动使用-j4吗?我能做些什么来优化我的编译吗
- 对象未复制.我能做些什么来复制它们