C ++ 11如何通过int值获取枚举类值?

时间:2015-12-10 10:40:36

标签: c++11 enums

我可以通过我的int变量值获取枚举类变体吗?现在,我有这样的枚举类:

enum class Action: unsigned int {
REQUEST,
RETURN,
ISSUANCE
};

我需要从数据库值中获取此值(数据库返回unsigned int)。如何最优化呢?现在,我只是为每个变体使用开关,但它是一个愚蠢的。请解释一下我!

2 个答案:

答案 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);
}