我有一个变量声明为:
enum class FooEnum: uint64_t {}
Run Code Online (Sandbox Code Playgroud)
我想转换为它的基类型,但我不想硬编码基类型.例如,像这样:
FooEnum myEnum;
uint64_t * intPointer = (underlying_typeof(myEnum))&myEnum;
Run Code Online (Sandbox Code Playgroud)
这可能吗?
Naw*_*waz 36
你可以用这个:
std::underlying_type
类模板,以了解枚举的基础类型.该文档称,
定义了一个构件
typedef
的类型类型是用于枚举T.基础类型
所以你应该能够做到这一点:
#include <type_traits> //include this
FooEnum myEnum;
auto pointer = static_cast<std::underlying_type<FooEnum>::type*>(&myEnum);
Run Code Online (Sandbox Code Playgroud)
How*_*ant 17
你猜对了的语法非常接近.您正在寻找std::underlying_type
的<type_traits>
:
#include <type_traits>
#include <cstdint>
enum class FooEnum: std::uint64_t {};
int main()
{
FooEnum myEnum;
uint64_t* intPointer = (std::underlying_type<FooEnum>::type*)&myEnum;
}
Run Code Online (Sandbox Code Playgroud)
Visual C++ 10.0和MinGW g ++ 4.6.1都缺少std::underlying_type
,但都接受此代码:
template< class TpEnum >
struct UnderlyingType
{
typedef typename conditional<
TpEnum( -1 ) < TpEnum( 0 ),
typename make_signed< TpEnum >::type,
typename make_unsigned< TpEnum >::type
>::type T;
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9377 次 |
最近记录: |