使用typedef + define与enum

时间:2013-09-29 05:33:34

标签: c++ enums c-preprocessor

我想知道在C ++中使用typedef +常量与使用枚举列表的区别。差异似乎对我来说很重要的原因是因为我使用的枚举会让中间的连续性突然变为“丑陋”

使用这两种方法的卡片示例,您需要为卡片的值和套装定义新类型:

enum Value{
    ace = 1,
    //Biggest issue is I dont want to have two = 2 etc. until 10
    jester = 11,
    queen = 12,
    king = 13
};

在这个例子中,问题是如果我想要一个新的值是数字,让我说7我做不到:

Value a_value = 7; //Won't allow int to Value
Value a_value = seven; //This extra enum seems just bad

另一种选择是:

typedef char Value
#define ace 1
#define jester 11
#define queen 12
#define king 13

这基本上是相同的结果,但是这个方法让我做:

Value a_value = 7;

我可以在#define中使用第二种方法,或者这样做是错误的吗?

2 个答案:

答案 0 :(得分:3)

在您的示例中,我认为enum解决方案更好,它会阻止使用,如:

Value a = 0;   //illegal
Value b = 14;  //illegal

只需填写acejester之间的空白即可。这似乎没有害处。在我看来,代码甚至看起来更干净:

enum Value{
    ace = 1,
    two,
    three,
    four,
    five,
    six,
    seven,
    eight,
    nine,
    ten,
    jester,
    queen,
    king
};

答案 1 :(得分:0)

你可以这样做

enum Value ={ace=1, two,...};
Value a_value = static_cast<Value>(some int value, in enum range);