C++ 将标志组合映射到枚举的最简单方法是什么?

C++ 将标志组合映射到枚举的最简单方法是什么?,c++,enums,boolean,C++,Enums,Boolean,我得到了一个枚举类型,它看起来或多或少像这样 enum foo{ X, XandY, XandZ, XandYandZ, none, Y, Z, YandZ, someSpecialCase, anotherSpecialCase }; 我有几个消息对象通过一个管道,一个特定的阶段决定这个消息是否有X,另一个阶段决定它是否有Y等等。最终,消息需要用这些标签中的一个来标记。我设计了消息对象,但枚举已经定义。我不想假设枚举有任何数值。所以我放置了一些布尔标志,比如hasX,hasY,它们可以在不同

我得到了一个枚举类型,它看起来或多或少像这样

enum foo{
X,
XandY,
XandZ,
XandYandZ,
none,
Y,
Z,
YandZ,
someSpecialCase,
anotherSpecialCase
};
我有几个消息对象通过一个管道,一个特定的阶段决定这个消息是否有X,另一个阶段决定它是否有Y等等。最终,消息需要用这些标签中的一个来标记。我设计了消息对象,但枚举已经定义。我不想假设枚举有任何数值。所以我放置了一些布尔标志,比如hasX,hasY,它们可以在不同的阶段单独设置。有没有比只编写两层嵌套的if-else子句更好的方法

为清晰起见进行了编辑

再次编辑,更改变量名。

如果我正确理解了这个问题,那么实际上您所说的是多路复用器。i、 e.将多个信息流合并为一个。这可以通过使用查找表轻松实现,具体实现取决于您

您可以将各种输入流组合成一个键对象。我在下面包含了一些代码,但没有时间检查/运行它,因此请将其视为伪代码,而不是逐字逐句

使用地图

struct MyKey
{
    MyKey( bool X, bool Y, bool Z, bool SC1, bool SC2 ) :
        X_(X), Y_(Y), Z_(Z), SC1_(SC1), SC2_(SC2) {}

    bool X_;
    bool Y_;
    bool Z_;
    bool SC1_;
    bool SC2_;
};

您还需要一个
操作器或在尝试开关盒时?您能清楚输入吗?是否给定了枚举值,或者是否给定了必须从中确定枚举值的X、Y和Z?为清晰起见,请进行编辑。我需要指定其中一个标签。根据案例的数量和问题的性质,您可以为特定状态指定1到2位。我认为您仍然需要进行更多解释,以获得一个好的解决方案。例如,
notXandY
是否表示
Z
?或者
notXandZ
实际上是指
Y
?那么那些特殊情况呢,;你的意思是说
notXandYandZ
typedef enum foo FooEnum;
std::map< MyKey, FooEnum > myMap;
myMap.insert( std::make_pair< MyKey, FooEnum >( MyKey(true,false,true,false,false), XandZ ) );
std::map< MyKey, FooEnum >::const_iterator it = myMap.find( MyKey(X,Y,Z,SC1,SC2) );
if ( it != myMap.end() )
{
    enum foo valueINeed = it.second;
    // ...