我可以通過我的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++。請寫下更多關於它的信息,我不確定是否瞭解你。 –