我有很大的老式enum
不是C++ 11强类型枚举, 我要重复,虽然它的值,如:C++足够大的整数,枚举
enum Enum {
enBEGIN = 0,
eFirst,
eSecond,
//many lines
enEND
};
Enum val;
for (auto i = make_big_enough_integer<Enum>(val); i != enEND; ++i)
;
的问题是如何实现make_big_enough_integer
以最简单的方式?
make_big_enough_integer
应该返回val
转换为整数int32_t
类型,uint32_t
或uint64_t
所以可以处理在enum
所有值。
注1:转换为强类型的枚举不是一个选项,因为它被用于太多的程序地址, ,并且无法想象正则表达式可以代替所有的出现。
注2:我可以循环之前插入,像 这static_cast(sizeof(Enum) <= sizeof(int), "error");
或只使用uint64_t
,但我有趣的写汽车采用以平台的代码。
您是否在寻找'的std :: underlying_type'? –