मुझे लगता है कि आप अंतर्निहित प्रकार जानने के लिए std :: inher_type का उपयोग कर सकते हैं , और फिर कलाकारों का उपयोग कर सकते हैं:
#include <type_traits> //for std::underlying_type
typedef std::underlying_type<my_fields>::type utype;
utype a = static_cast<utype>(my_fields::field);
इस के साथ, आप की जरूरत नहीं है मान लेते हैं , अंतर्निहित प्रकार या आप की जरूरत नहीं है की परिभाषा में यह उल्लेख करने के लिए enum classकी तरह enum class my_fields : int { .... }या तो।
तुम भी एक लिख सकते हैं सामान्य परिवर्तित समारोह है कि परिवर्तित करने के लिए सक्षम होना चाहिए किसी भी enum class उसके अंतर्निहित करने के लिए अभिन्न प्रकार:
template<typename E>
constexpr auto to_integral(E e) -> typename std::underlying_type<E>::type
{
return static_cast<typename std::underlying_type<E>::type>(e);
}
फिर इसका उपयोग करें:
auto value = to_integral(my_fields::field);
auto redValue = to_integral(Color::Red);//where Color is an enum class!
और चूंकि फ़ंक्शन को घोषित किया जाता है constexpr, आप इसका उपयोग कर सकते हैं जहां निरंतर अभिव्यक्ति की आवश्यकता होती है:
int a[to_integral(my_fields::field)]; //declaring an array
std::array<int, to_integral(my_fields::field)> b; //better!
enum।