像这样的东西应该做的伎俩:
enum WordMask
{
Hello = 0x01,
Goodbye = 0x02,
Morning = 0x04
};
Run Code Online (Sandbox Code Playgroud)
现在,检查一个值是否包含标志Goodbye
和Morning
(它不关心是否Hello
设置):
if ((value & (Goodbye | Morning)) == (Goodbye | Morning)) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
您可以对此进行概括,以便您不必重复两次标记:
template <typename T>
bool are_all_flags_set(T value, T flags)
{
return (value & flags) == flags;
}
Run Code Online (Sandbox Code Playgroud)
然后你的情况变成:
if (are_all_flags_set(value, Goodbye | Morning)) {
// ...
}
Run Code Online (Sandbox Code Playgroud)