我正在玩Visual Studio 11 Beta。我使用强类型枚举来描述一些标志
enum class A : uint32_t
{
VAL1 = 1 << 0,
VAL2 = 1 << 1,
};
uint32_t v = A::VAL1 | A::VAL2; // Fails
当我尝试将它们组合起来时,我得到以下错误
error C2676: binary '|' : 'A' does not define this operator or a conversion to a type acceptable to the predefined operator
这是编译器的错误还是我根据c ++ 11标准尝试无效的?
我的假设是先前的枚举声明等同于写作
struct A
{
enum : uint32_t
{
VAL1 = 1 << 0,
VAL2 = 1 << 1,
};
};
uint32_t v = A::VAL1 | A::VAL2; // Succeeds, v = 3
答案 0 :(得分:2)
强类型枚举不可隐式转换为整数类型,即使其基础类型为uint32_t
,您需要显式转换为uint32_t
以实现您正在做的事情。
答案 1 :(得分:0)
强类型枚举没有任何形式的运算符|
。看看那里:http://code.google.com/p/mili/wiki/BitwiseEnums
使用这个仅限标题的库,您可以编写类似
的代码enum class WeatherFlags {
cloudy,
misty,
sunny,
rainy
}
void ShowForecast (bitwise_enum <WeatherFlags> flag);
ShowForecast (WeatherFlags::sunny | WeatherFlags::rainy);
添加:无论如何,如果你想要uint32_t值,你必须明确地将bitwise_enum转换为uint32_t,因为它是enum类:限制enum类的整数值,除去显式static_casts之外的一些值检查使用枚举类值。