相关疑难解决方法(0)

C/C++:切换非整数

通常我需要根据非POD常量元素的值选择要做的事情,如下所示:

switch( str ) {
  case "foo": ...
  case "bar": ...
  default:    ...
}
Run Code Online (Sandbox Code Playgroud)

可悲的是switch只能用整数:error: switch quantity not an integer.

实现这样的事情最简单的方法是获得一系列ifs:

if( str == "foo" )      ...
else if( str == "bar" ) ...
else                    ...
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案看起来很脏并且应该花费O(n),其中n是案例数,而在最坏的情况下,使用二进制搜索,这段代码可能花费O(log n).

使用一些数据结构(如Maps)可以获得表示字符串的整数(O(log n)),然后使用O(1)switch,或者可以通过if在右边嵌套s 来实现静态二进制排序但是,这些黑客攻击还需要大量编码,使一切变得更加复杂和难以维护.

最好的方法是什么?(快速,干净,简单,正如switch声明所述)

c c++ switch-statement

53
推荐指数
5
解决办法
3万
查看次数

如何检查枚举值是否有效?

我正在读取enum二进制文件中的值,并想检查该值是否真的是enum值的一部分.我该怎么做?

#include <iostream>

enum Abc
{
    A = 4,
    B = 8,
    C = 12
};

int main()
{
    int v1 = 4;
    Abc v2 = static_cast< Abc >( v1 );

    switch ( v2 )
    {
        case A:
            std::cout<<"A"<<std::endl;
            break;
        case B:
            std::cout<<"B"<<std::endl;
            break;
        case C:
            std::cout<<"C"<<std::endl;
            break;
        default :
            std::cout<<"no match found"<<std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

我是否必须使用switch操作员或有更好的方法吗?

编辑

我设置了枚举值,不幸的是我无法修改它们.更糟糕的是,它们不是连续的(它们的值为0,75,76,80,85,90,95,100等)

c++ enums

44
推荐指数
6
解决办法
6万
查看次数

枚举值的类型不是int?

由于c ++底层类型的c ++枚举应该是int.

但是有代码

enum class Properties{ first , second }
void tmp ( int i ) {}

tmp( Properties::first )
Run Code Online (Sandbox Code Playgroud)

编译器抱怨Properties ::首先不是int而是属性类型.

我是否真的必须将它转换为int才能将枚举值传递给函数或是否有解决方法?

感谢帮助.

c++ enums c++11

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

标签 统计

c++ ×3

enums ×2

c ×1

c++11 ×1

switch-statement ×1