আমি মনে করি আপনি অন্তর্নিহিত প্রকারটি জানতে std :: অন্তর্নিহিত_প্রকারটি ব্যবহার করতে পারেন এবং তারপরে কাস্ট ব্যবহার করতে পারেন:
#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
।