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) );
しかし、これは非常に恐ろしいことであり、合法であるかどうかさえわかりません (値が切り捨てられるのでしょうか??)。
解決策はありますか?