区分两个同等重要,不同名称的枚举值

时间:2016-08-17 11:41:18

标签: c++ debugging visual-studio-2013 enums reference

简短说明:

对于2个不同的枚举常量,我有一个具有相同值的枚举:

namespace MOTOR
{
     using AXES = enum : int
     {
         X,
         Y,
         SPECIAL = 0X01,
     };
}

因此SPECIAL与Y具有相同的值(均为0x01)。

我还有一个执行以下操作的功能:

ErrType CMotorBase::ConvertAxis(MOTOR::AXES& Axis)
{
     switch(Axis)
     {
          case MOTOR::AXES::X: Axis = MOTOR::AXES::SPECIAL;
          break;
     }
     return NO_ERROR;
}

当我尝试使用这样的函数时:

MOTOR::AXES Axis = MOTOR::AXES::X;
ErrType Err = ConvertAxis(Axis);
...
other code
...

我希望当我在“其他代码”上点击断点时,Axis的值将是 MOTOR :: AXES :: SPECIAL on visual studio调试器。

但我得到了Axis = MOTOR :: AXES :: Y; (相同的值,不同的常量名称)

它们当然具有相同的值,所以“逻辑”是可以的,但是另一个程序员会在调试时认为出了问题。

知道怎么解决吗?我希望从函数返回时,值和名称都是正确的。

1 个答案:

答案 0 :(得分:2)

MOTOR::AXES::SPECIALMOTOR::AXES::SPECIAL都具有相同的值,因此编译器(或任何人)在任何地方都无法区分它们。

您可能希望为MOTOR::AXES::Y提供不同的值,但在适用的情况下给予enum AXIS { X. Y }; enum SPECIAL_AXIS { SPECIAL_X = AXIS::Y, SPECIAL_Y = /* a value */ }; 相同的处理。这可能会给您的程序增加一些复杂性,但这是您想要的额外“智能”的成本。

编辑: 或者(根据您的评论),您可能希望将“普通”(内部)和“特殊”(外部)枚举分成两个单独的枚举,因此可以按类型区分它们。像这样:

.product-list .product-thumb .description {
position: relative;
bottom: 26px;
left: 290px;
width: 30px;
}