我可以通过我的int变量值获得枚举类变体吗?现在,我有这样的枚举类:C++ 11如何通过int值获取枚举类的值?
enum class Action: unsigned int {
REQUEST,
RETURN,
ISSUANCE
};
而且我需要从数据库值(数据库返回无符号整数)获取此值。如何优化使其成为可能?现在,只是我为每个变体使用开关,但这是一种愚蠢的行为。请解释我!
我可以通过我的int变量值获得枚举类变体吗?现在,我有这样的枚举类:C++ 11如何通过int值获取枚举类的值?
enum class Action: unsigned int {
REQUEST,
RETURN,
ISSUANCE
};
而且我需要从数据库值(数据库返回无符号整数)获取此值。如何优化使其成为可能?现在,只是我为每个变体使用开关,但这是一种愚蠢的行为。请解释我!
你甚至可以写,应该是能够任意枚举类转换为它的基本类型(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);
}
非常感谢!这对我很有帮助。但如何才能捕获类型转换的错误? –
请问,你能解释一下这部分代码是如何使''typename td :: underlying_type
请解释我如何使用这个功能。现在,我尝试这样做:'Action a = toUnderlyingType(my_unsigned_int_var);' –
我很喜欢这个开关,因为这意味着你可以添加一条default: assert(!"Bad value in database");
行。另一方面:
unsigned int ui = ... ;
auto action = static_cast<Action>(ui);
也可以工作。
谢谢你的样品!我明白这是一种糟糕的方式。但是我没有其他的价值,只能从这个枚举中获得。 –
看看'static_cast'。顺便说一句,在C++中使用所有大写标识符是*不是一个好主意。他们可能会因宏名称而崩溃。 –
感谢您的咨询!我只开始学习C++。请写下更多关于它的信息,我不确定是否了解你。 –