我可以通过我的int变量值获取枚举类变体吗?现在,我有这样的枚举类:
enum class Action: unsigned int {
REQUEST,
RETURN,
ISSUANCE
};
Run Code Online (Sandbox Code Playgroud)
我需要从数据库值中获取此值(数据库返回unsigned int).如何最优化呢?现在,我只是为每个变体使用开关,但这是一个愚蠢.拜托,解释一下!
我非常喜欢这个开关,因为这意味着你可以添加一条default: assert(!"Bad value in database");线.另一方面:
unsigned int ui = ... ;
auto action = static_cast<Action>(ui);
Run Code Online (Sandbox Code Playgroud)
也会工作.
您甚至可以编写一个通用的转换函数,该函数应该能够将任何枚举类转换为其基础类型(C++ 14):
template<typename E>
constexpr auto toUnderlyingType(E e)
{
return static_cast<typename std::underlying_type<E>::type>(e);
}
Run Code Online (Sandbox Code Playgroud)
用C++ 11
template<typename E>
constexpr auto toUnderlyingType(E e) -> typename td::underlying_type<E>::type
{
return static_cast<typename std::underlying_type<E>::type>(e);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6193 次 |
| 最近记录: |