ヘッダーのみのプロジェクトがあります。その中にクラスがあります。その内部(または実際には他の場所)に定数データ(列挙値を文字列に、またはその逆)にしたいです。この問題は、私が予想していたよりもはるかに難しいようです。
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(){ /* ... */ };
};
アイデア?