我有一个只有标题的项目。在里面我有一堂课。在它里面(或者实际上其他任何地方)我想要有常量数据(枚举值到字符串,反之亦然)。这个问题似乎比我预期的要困难得多。
typedef boost::bimap<MyEnum,std::string> Data;
我尝试过但没有奏效的方法:
static Data const s_data = _initData();
: 错误是这样的:only static const integral data members can be initialized within a class
。static Data const * const s_pData = _initData();
:该_initData()
函数有一个静态局部变量(在第一次调用时填充),并返回它的地址。没有与上述相同的原因。
我尝试过并且工作过,但我认为它很难看:
class Ugly {
public:
static MyEnum lookupByName(std::string s)
{
MyEnum ret;
lookup(ret,s,true);
return ret;
}
static String lookupByEnum(MyEnum e)
{
std::string ret;
lookup(e,ret,false);
return ret;
}
static void lookup(MyEnum &e, std::string &s, bool etos)
{
static Data s_data = _fill();
if(etos)
s = /* ... */;
else
e = /* ... */;
}
static Data _fill(){ /* ... */ };
};
想法?