アイテムを列挙型から対応する文字列に変換する関数を作成しようとしています。私が使用する列挙型はかなり長いので、switch-caseは使いたくありませんでした。boost :: unordered_mapを使用するメソッドは非常に便利ですが、デフォルトの戻り値を作成する方法がわかりません(列挙型に一致するアイテムがない場合)。
const boost::unordered_map<enum_type, const std::string> enumToString = boost::assign::map_list_of
(data_1, "data_1")
(data_2, "data_2");
追加の関数を作成しようとしました:
std::string convert(enum_type entry)
{
if (enumToString.find(entry)) // not sure what test to place here,
return enumToString.at(entry); //because the find method returns an iter
else
return "invalid_value";
}
私も非常に間違ったことを試みました:
std::string convert(enum_type entry)
{
try{
return enumToString.at(entry);
}
catch(...){
return "invalid_value";
}
}
結果:邪悪な「デバッグ」ランタイムエラー。
1)列挙型を列挙型アイテムと同じ名前の文字列に変換する簡単な方法を
見つける2)すでに構築されているブーストメソッドを使用してハッシュマップからデフォルト値を取得する方法を見つける方法について誰かが私に提案を与えることができますか?(最良のオプション)
3)キーと値のペア、またはキーがマップに見つからない場合は別の文字列のいずれかを返す関数を使用するために、テストに何を配置するかを見つけます。
どうもありがとうございます。