我可以通过我的int变量值获取枚举类变体吗?现在,我有这样的枚举类:
enum class Action: unsigned int {
REQUEST,
RETURN,
ISSUANCE
};
我需要从数据库值中获取此值(数据库返回unsigned int)。如何最优化呢?现在,我只是为每个变体使用开关,但它是一个愚蠢的。请解释一下我!
答案 0 :(得分:7)
我非常喜欢这个开关,因为这意味着你可以添加default: assert(!"Bad value in database");
行。另一方面:
unsigned int ui = ... ;
auto action = static_cast<Action>(ui);
也会奏效。
答案 1 :(得分:5)
你甚至可以编写一个通用的转换函数,它应该能够将任何枚举类转换为它的基础类型(C ++ 14):
template<typename E>
constexpr auto toUnderlyingType(E e)
{
return static_cast<typename std::underlying_type<E>::type>(e);
}
使用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);
}