使用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)" 

开启VisualStudio2017模块特性.png

设置标准库模块的库目录

在“配置属性 - VC++目录”中的“库目录”中添加:

$(VCToolsInstallDir)ifc\$(PlatformTarget)\$(Configuration)

设置VisualStudio2017标准库模块库目录.png

添加标准库模块的静态库

在“配置属性 - 链接器 - 输入”中的“附加依赖项”中添加“std.lib”
在VisualStudio2017的项目中添加标准库模块依赖项.png

定义一个模块

新建一个模块文件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");
}

编译运行

编译运行,即可看到:
VisualStudio2017使用模块编译运行结果.png

标签: none

添加新评论