相关疑难解决方法(0)

枚举类型的命名空间 - 最佳实践

通常,人们需要一起使用几种枚举类型.有时,一个人有一个名字冲突.我想到了两种解决方案:使用命名空间,或使用"更大"的枚举元素名称.仍然,命名空间解决方案有两种可能的实现:具有嵌套枚举的虚拟类或完整的命名空间.

我正在寻找这三种方法的优缺点.

例:

// oft seen hand-crafted name clash solution
enum eColors { cRed, cColorBlue, cGreen, cYellow, cColorsEnd };
enum eFeelings { cAngry, cFeelingBlue, cHappy, cFeelingsEnd };
void setPenColor( const eColors c ) {
    switch (c) {
        default: assert(false);
        break; case cRed: //...
        break; case cColorBlue: //...
        //...
    }
 }


// (ab)using a class as a namespace
class Colors { enum e { cRed, cBlue, cGreen, cYellow, cEnd }; };
class Feelings { enum e { cAngry, cBlue, cHappy, cEnd …
Run Code Online (Sandbox Code Playgroud)

c++ enums scope nested

98
推荐指数
7
解决办法
7万
查看次数

Switch语句不适用于枚举(C++)

enum Maximum_Value{
    MAXIMUM_VALUE_1 = 0,
    MAXIMUM_VALUE_7 = 1,
    MAXIMUM_VALUE_15 = 2,
    MAXIMUM_VALUE_26 = 3,
    MAXIMUM_VALUE_34 = 4
};

int value_from_function = functionetc();

switch(value_from_function){
    MAXIMUM_VALUE_1: printf("MAXIMUM_VALUE_1 :%x\n",value_from_function); break;
    MAXIMUM_VALUE_7: printf("MAXIMUM_VALUE_7 :%x\n",value_from_function); break;
    MAXIMUM_VALUE_15: printf("MAXIMUM_VALUE_15 %x\n",value_from_function); break;
    MAXIMUM_VALUE_26: printf("MAXIMUM_VALUE_26 %x\n",value_from_function); break;
    MAXIMUM_VALUE_34: printf("MAXIMUM_VALUE_34 %x\n",value_from_function); break;  
    default: printf("default :%x\n",value_from_function);
 }
Run Code Online (Sandbox Code Playgroud)

上面的代码似乎总是点击默认语句,打印"default:0",即使它应该达到MAXIMUM_VALUE_1.

我已经尝试在切换中将变量转换为无效

我想我应该将返回值保存到"Maximum_Value"类型的变量中,但为什么代码不能正常工作呢?

编辑:感谢你指出每个人都非常愚蠢的错误:P.问题的根源是从systemverilog复制编码,它使用'case'作为关键字而不是'switch',并且在每个案例的开头都不需要'case'

c++ enums switch-statement

1
推荐指数
1
解决办法
749
查看次数

如何在切换条件下使用枚举

以下代码使用带枚举的开关.主程序将参数正确传递给函数,但不执行正确的开关行.你能告诉它为什么没有进入开关条件吗?

enum MyEnum {
    Enum1    = 1,
    Enum2    = 0x0D
};

bool compute(MyEnum code) {
  switch(code) {
     Enum1:  return true;
     Enum2:  return false;
  };
  cout << "why here??" << endl; // this line is getting printed for both inputs
  return false;
}
int main() {
    cout << "compack=" << compute((MyEnum)1) << endl; // printed "0"
    cout << "compack=" << compute((MyEnum)13) << endl; // printed "0"
}
Run Code Online (Sandbox Code Playgroud)

我检查了与switch和enum相关的其他问题(例如3019153),但是无法弄清楚这个bug.

c++

0
推荐指数
1
解决办法
132
查看次数

标签 统计

c++ ×3

enums ×2

nested ×1

scope ×1

switch-statement ×1