//C++11 限定作用域的枚举类型.
#include <iostream>
#include <type_traits>
#define true false;
//限定作用域的枚举类型.
enum class Phone : int{ //这里的:int指出了该enum的潜在类型.
Iphone, //有时候我们想要类型精确的匹配假如我们未使用:int,怎么办呢?下面的模板函数给出答案.
Nokia,
Moto
};
enum Color : short int{
Red,
Green,
Yellow
};
template<typename E>
constexpr typename std::underlying_type<E>::type toUType(const E& e)noexcept
{
return static_cast<typename std::underlying_type<E>::type>(e);
}
int main()
{
int x = Red; //unscoped-enum to int. OK
//int x1 = Iphone; //error.
//int x1 = Phone::Iphone; //error.
int x1 = static_cast<int>(Phone::Nokia); //ok.
auto x2 = toUType(Phone::Nokia);
std::cout<<x2<<std::endl;
return 0;
}
转载于:https://my.oschina.net/SHIHUAMarryMe/blog/625396