简短说明:
对于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; (相同的值,不同的常量名称)
它们当然具有相同的值,所以“逻辑”是可以的,但是另一个程序员会在调试时认为出了问题。
知道怎么解决吗?我希望从函数返回时,值和名称都是正确的。
答案 0 :(得分:2)
MOTOR::AXES::SPECIAL
和MOTOR::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;
}