我在 C++ 中遇到了这个问题:我可以键入一个其值来自枚举的位域吗?
代码将更具解释性:
typedef {
AUDIO = 0x01,
VIDEO = 0x02,
SUBTITLE = 0x04,
DATA = 0x08,
GUARD,
ALL = 0xFF
} my_enum_e;
// I'd like to replace 'unsigned int' by 'my_enum_e' or similar
int myFunction( unsigned int mask )
{
// code
}
// called like this:
myFunction( AUDIO|VIDEO|DATA );
在函数的原型中,我想将其my_enum_e
用作输入值类型,以便在探索代码时,您可以立即知道应该放入哪些值。
现在,将原型更改为
int myFunction( my_enum_e mask );
使编译器抱怨转换错误。我无法通过像这样转换函数调用来修复它:
int myFunction( my_enum_e mask )
{
// code
}
myFunction( (my_enum_e)(VIDEO|AUDIO|DATA) );
但我觉得这很可怕,我什至不确定它是否合法(它会截断值吗??)。
你有解决方案吗?