I am trying to build a function that converts an item from an enum to its corresponding string. The enums I use are fairly long, so I didn't want to use a switch-case. I found a method using boost::unordered_map very convenient, but I don't know how to make a default return (when there is no item matching the enum).
const boost::unordered_map<enum_type, const std::string> enumToString = boost::assign::map_list_of
(data_1, "data_1")
(data_2, "data_2");
I tried to create an additional function:
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";
}
I even tried something exceedingly wrong:
std::string convert(enum_type entry)
{
try{
return enumToString.at(entry);
}
catch(...){
return "invalid_value";
}
}
Result: evil "Debug" runtime error.
Can somebody give me a suggestion on how to either
1) find an easier method to convert enum to a string with the same name as the enum item
2) find a way to use already built boost methods to get a default value from a hash map (best option)
3) find what to place in the test to use a function that returns either the pair of the key-value, or a different string if the key is not found in the map.
Thank you very much.