C++ C++;:仅标题项目,静态常量非整数

C++ C++;:仅标题项目,静态常量非整数,c++,C++,我有一个只有标题的项目。里面我有一节课。在它里面(或者其他任何地方),我希望有常量数据(枚举值到字符串,反之亦然)。这个问题似乎比我想象的难多了 typedef boost::bimap<MyEnum,std::string> Data; 想法?越简单越好 static T& global_t() { static T z = initializer; return z; } global\u t()可用于需要t值的地方 注意: 在回答rioki注释时,如果函数处于全局或

我有一个只有标题的项目。里面我有一节课。在它里面(或者其他任何地方),我希望有常量数据(枚举值到字符串,反之亦然)。这个问题似乎比我想象的难多了

typedef boost::bimap<MyEnum,std::string> Data;
想法?

越简单越好

static T& global_t()
{ static T z = initializer; return z; }
global\u t()
可用于需要t值的地方

注意: 在回答rioki注释时,如果函数处于全局或命名空间级别,我们还必须将其指定为
inline
(以避免链接器的“多实例”问题)

如果函数是模板或类成员函数(默认情况下为其内联定义),则不需要内联关键字

如果
static T
实例化必须在不同的操作系统模块(读:dll)之间共享,那么rioki是完全正确的,但是——在这一点上——只有头的库没有任何意义


从C++17开始,
inline
说明符也可以用于变量

因此,从C++17开始,您只需编写

inline T global_object = initializer;
您还可以对函数的静态成员使用内联,以提供内联初始化,如

class Class
{
    static inline Type static_object_name = initializer;
};

这是使用仅标头库的唯一方法。请注意,在Windows上,您将获得多个实例,每个模块一个(dll/exe)。唯一的解决方案是构建一个dll。(静态库不行。)
class Class
{
    static inline Type static_object_name = initializer;
};