c++11 实现枚举值到枚举名的转换
- 作者: 五速梦信息网
- 时间: 2026年04月04日 13:48
template<typename T>
string EnumHelper(T key, const std::function<char(char)> processor = nullptr, const char* pszName = NULL)
{
static_assert(std::is_enum_v<T>, __FUNCTION__ "'s key need a enum");
static map<T, string> s_mapName;
if (nullptr != pszName)
{<br/>
s_mapName[key] = pszName;<br/>
}
std::string res = “”;
auto it = s_mapName.find(key);<br/>
if (it != s_mapName.end())<br/>
{<br/>
res = it->second;<br/>
}
if (nullptr != processor)
{<br/>
std::transform(res.begin(), res.end(), res.begin(), processor);<br/>
}
return res;
}
template <class T>
size_t analystEnum(T enumClass, const char* pszNames)
{
static_assert(std::is_enum_v<T>, __FUNCTION__ "'s enumClass need a enum");
cout << “analystEnum: ” << pszNames << endl;
if (nullptr != pszNames)
{<br/>
const vector<string>& vecName = split(pszNames, ",");
for (int i = 0; i < vecName.size(); ++i)
{<br/>
if (vecName.at(i).size() > 0)<br/>
{<br/>
EnumHelper((T)(i + 1), nullptr, vecName.at(i).c_str() + (i == 0 ? 0 : 1) );<br/>
}<br/>
}
return rand();
}
return rand();
}
#define ENUM_DEFINE(type, …) enum class type { placeholder, VA_ARGS }; static const size_t g_uEnumSizeOf##type = analystEnum(type::placeholder, #VA_ARGS);
- 上一篇: C++11实用特性1
- 下一篇: C++ 运算符重载一(二元运算符重载)






