gpt4 book ai didi

c++ - 使用遗留头文件作为 c++20 模块

转载 作者:行者123 更新时间:2023-12-03 18:54:18 24 4
gpt4 key购买 nike

我正在将我的旧代码转换为可作为 c++ 模块导入的东西。问题是我希望它仍然可以工作并且很容易维护为旧的 header /源版本。我该怎么做(如果可能)。
是否可以创建一个导出标题内容的模块? (也接受任何其他允许您维护旧的 .cpp/.h 文件和模块文件的解决方案)
玩具示例:

// In vector.h
template <typename T>
struct Vector {
T x, y;
}

// In .cppm
export module vector;
// #include "vector.h"
// Export struct/class Vector from header
我试过的只是 export Vector在不同的版本中,有和没有模板等。
额外的问题:你能为标准库做到这一点吗? (例如 iostream 或字符串)

最佳答案

最近我创建了两个答案first one关于如何从任何旧式标题中创建模块(在 CLang 中)。 Second one关于如何从 STD header 创建模块。
现在使用这两个答案,您可以像以前一样在旧的 .hpp 中编码风格。然后在使用代码中,您可以执行以下操作:

#if USE_MODULES
import std_mod; // Module created out of all STD headers.
import my_lib; // Module created out of my_lib.h.
#else
#include <iostream>
#include <vector>
// ... All other tons of STD headers ...

#include "my_lib.h"
#endif

int main() { use_my_lib(); }
使用头文件作为模块或作为包含是完全可以互换的,在这两种情况下你甚至会有宏,因为 CLang 的头文件模块也导出宏。
此外,您不需要任何特殊语法来创建 my_lib。图书馆。您不需要使用 exportmodule关键字,您只需像在没有模块的旧式 C++ 中一样编码,然后您的标题很容易转换为模块。
我在我相当庞大的 C++ 项目中做了这样的事情。它完全没有模块编码,然后在我的构建系统中自动将所有头文件转换为模块,这大大提高了编译速度。当然,我实现了自己的构建系统,它知道包含和模块,并在飞行时自动进行转换而不更改原始文件。

关于c++ - 使用遗留头文件作为 c++20 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66239902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com