相关疑难解决方法(0)

如何自动将强类型枚举转换为int?

#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};
enum class b { B1, B2 };

int foo(int input) { return input; }

int main(void) {
  std::cout << foo(a::A1) << std::endl;
  std::cout << foo(static_cast<int>(b::B2)) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

a::LOCAL_A是强类型枚举试图实现的,但有一个小的区别:普通枚举可以转换为整数类型,而强类型枚举不能没有强制转换.

那么,有没有办法将强类型的枚举值转换为没有强制转换的整数类型?如果有,怎么样?

c++ c++11 strongly-typed-enum

144
推荐指数
11
解决办法
19万
查看次数

基于范围的普通数组的工作原理如何?

在C++ 11中,您可以使用基于范围的语言for,它可以充当foreach其他语言.它甚至适用于普通的C数组:

int numbers[] = { 1, 2, 3, 4, 5 };
for (int& n : numbers) {
    n *= 2;
}
Run Code Online (Sandbox Code Playgroud)

怎么知道什么时候停止?它是否仅适用于已在相同范围内声明的静态数组for?你会如何for在动态数组中使用它?

c++ arrays foreach c++11

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

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

我正在读取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万
查看次数

枚举C++中的枚举

在C++中,是否可以枚举枚举(运行时或编译时(首选))并为每次迭代调用函数/生成代码?

示例用例:

enum abc
{    
    start
    a,
    b,
    c,
    end
}    
for each (__enum__member__ in abc)
{    
    function_call(__enum__member__);    
}
Run Code Online (Sandbox Code Playgroud)

合理的重复:

c++ enums enumeration metaprogramming

38
推荐指数
2
解决办法
2万
查看次数

迭代非增量枚举

在你问之前,我已经在SO上寻找寻找了这个,但是找不到可靠的答案.

我需要能够动态迭代具有非增量值的枚举,例如:

typedef enum {
    CAPI_SUBTYPE_NULL = 0,               /* Null subtype. */
    CAPI_SUBTYPE_DIAG_DFD = 1,           /* Data Flow diag. */
    CAPI_SUBTYPE_DIAG_ERD = 2,           /* Entity-Relationship diag. */
    CAPI_SUBTYPE_DIAG_STD = 3,           /* State Transition diag. */
    CAPI_SUBTYPE_DIAG_STC = 4,           /* Structure Chart diag. */
    CAPI_SUBTYPE_DIAG_DSD = 5,           /* Data Structure diag. */
    CAPI_SUBTYPE_SPEC_PROCESS = 6,       /* Process spec. */
    CAPI_SUBTYPE_SPEC_MODULE = 7,        /* Module spec. */
    CAPI_SUBTYPE_SPEC_TERMINATOR = 8,    /* Terminator spec. */

    CAPI_SUBTYPE_DD_ALL = …
Run Code Online (Sandbox Code Playgroud)

c++ enums iterator

38
推荐指数
3
解决办法
1万
查看次数

循环遍历枚举值

是否可以在Objective-C中循环枚举值?

c enums objective-c

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

在C++中迭代连续枚举值的最简单方法

在C++中使用连续值迭代枚举的首选简单方法是什么?我之前发现了关于这个主题的SO问题,其中涉及创建自定义operator++等,但这看起来有点矫枉过正.到目前为止,我提出的最好的是:

enum {
   FOO,
   BAR,
   BLECH,
   NUM_ENUMS
} MyEnum;

//for (MyEnum m = FOO; m < NUM_ENUMS; ++m)             // compile error
//    ...

//for (MyEnum m = FOO; m < NUM_ENUMS; m = m + 1)       // compile error
//    ...

for (MyEnum m = FOO; m < NUM_ENUMS; m = MyEnum(m + 1)) // OK ?
    ...
Run Code Online (Sandbox Code Playgroud)

从编码风格的角度看这是否合理,是否可能产生警告(g++ -Wall ...对此感到高兴)?

c++ enums for-loop

16
推荐指数
1
解决办法
2万
查看次数

运算符重载枚举

是否可以为枚举定义运算符?例如,我在课堂上有枚举月份,我希望能够写出++ my_month.
谢谢
PS
为了避免溢出我做了这样的事情:

void Date::add_month()
{
    switch(my_month_)
    {
    case Dec:
        my_month_ = Jan;
        add_year();
        break;
    default:
        ++my_month_;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ enums operators

12
推荐指数
2
解决办法
2万
查看次数

foreach中的C++枚举

可能的重复:
枚举C++
C++中的枚举:迭代枚举

我有一个二十一点游戏的卡片类,有以下枚举:

enum Rank { Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King };
enum Suit { Clubs, Diamonds, Hearts, Spades };
Run Code Online (Sandbox Code Playgroud)

当我创建甲板时,我想编写如下代码:

// foreach Suit in Card::Suit
//   foreach Rank in Card::Rank
//     add new card(rank, suit) to deck
Run Code Online (Sandbox Code Playgroud)

我相信c ++中没有foreach.但是,我如何遍历枚举?

谢谢,斯宾塞

c++ foreach enums

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

如何使用枚举类值作为for循环的一部分?

我试图通过遍历枚举创建一副扑克牌SuitRank(我知道有没有遍历枚举好办法,但我没有看到另一种).我通过enum_count在每个枚举的末尾添加一个枚举器来做到这一点,其值用于表示枚举的长度和结尾.

#include <vector>

using namespace std;

enum class Suit: int {clubs, diamonds, hearts, spades, enum_count};
enum class Rank: int {one, two, three, four, five, six, seven, eight,
                nine, ten, jack, queen, king, ace, enum_count};

struct Card {
    Suit suit;
    Rank rank;
};

class Deck{
    vector<Card> cards{};
    public:
        Deck();
};

Deck::Deck() {
    // ERROR ON THE BELOW LINE
    for (Suit suit = Suit::clubs; suit < Suit::enum_count; suit++) {
        for (Rank rank = Rank::one; rank < …
Run Code Online (Sandbox Code Playgroud)

c++ enums loops c++11

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