从模块导出全局常量的正确方法是什么?

时间:2019-10-19 20:00:38

标签: c++ c++20 c++-modules

声明全局常量可能很方便,但是在C ++中并不容易。例如。参见this recent article at Fluent C++。它主要说明了如何执行此操作,但未提及C ++ 20模块。

在命名空间级别的常规头文件中,我将这样声明一个常量:

// Constants.h
inline constexpr int Count = 42;
inline const std::vector<int> Numbers = { 1, 2, 3 };  // cannot use constexpr

在这里我需要inline,因为这些符号可能包含在多个翻译单元中。 IIUC,输出符号的模块定义单元是一个单独的转换单元。因此,我将其简单声明如下:

// Constants.ixx
export module constants;

export constexpr int Count = 42;
export const std::vector<int> Numbers = { 1, 2, 3 };  // cannot use constexpr

这是正确的做法吗,还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

您做对了。还要注意一个重要的功能,例如C ++ 17中的inline,在C ++ 20中是通过import constrain initialization order(带有或不带有inline)表示的依赖项。