使用Visual Studio 2017中的C++标准库模块
关于C++ Module
C++目前有一个广受开发者诟病的由“Include”产生的一大堆复杂的嵌套以及一系列麻烦的依赖的问题,进而导致了编译速度极慢,而C++引入Module这一特性很大程度上就是为了解决这个问题,它的作用和用法与它在其它譬如Python、Java、C#语言中差不多。同时,C++ Module这一特性也是目前C++ 开发者呼声最高的特性之一,然而,遗憾的是,在C++ 17中并没有将Module纳入。只不过目前一部分C++编译器已经开始实验性地加入Module。
如何在 Visual Studio 2017 中使用自定义模块和标准库模块
在编译器选项中开启模块特性以及设置标准库模块
目前在Visual Studio 2017 中,模块特性依然是实验性功能,所以需要在编译器中手动打开这个特性。
在“配置属性 - C/C++ - 命令行”的“其他选项”中输入:
/experimental:module /module:search "$(VCToolsInstallDir)ifc\$(PlatformTarget)\$(Configuration)"
设置标准库模块的库目录
在“配置属性 - VC++目录”中的“库目录”中添加:
$(VCToolsInstallDir)ifc\$(PlatformTarget)\$(Configuration)
添加标准库模块的静态库
在“配置属性 - 链接器 - 输入”中的“附加依赖项”中添加“std.lib”
定义一个模块
新建一个模块文件sum.ixx,注意扩展名为ixx,而不是cpp或者c,不然编译器不会将其识别为模块源文件:
module mymodule;
namespace mymodule
{
int sum(int x, int y)
{
return x + y;
}
}
export
{
int mymodule::sum(int x, int y);
}
导入定义的模块
新建一个源码文件main.cpp,示例代码如下:
import std.core;
import mymodule;
int main()
{
std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
std::cout<< mymodule::sum(vec.at(0), vec.at(1))<<std::endl;
std::system("pause");
}
编译运行
编译运行,即可看到: