范围内容的最佳替代方案 - Pre C ++ 11

时间:2013-10-09 23:00:19

标签: c++ enums c-preprocessor

我想在我的代码中的几个地方开始使用枚举,但是我对编译器的先前声明有一个问题。目前声明枚举的方式对我来说最有意义:

避免这种情况的最佳方法是什么?

enum score_methods_t {NONE,ABS_FROM_PERFECT,ERROR_SQUARED};
enum scale_methods_t {NONE,CASES_MULTIPLIER,RANGE_MULTIPLIER};

我应该只使用命名空间使所有内容都是唯一的吗?我想在类中使用枚举类型,NONE是最具描述性的名称!

枚举冲突的原因也是因为基本上只是#defines在引擎盖下?

2 个答案:

答案 0 :(得分:11)

在C ++之前的11次,我用过:

struct score_methods { enum type { NONE, ABS_FROM_PERFECT, ERROR_SQUARED }; };

表示您始终拥有score_methods::type类型的enum和值score_methods::NONE等等。

另外,不,它们不仅仅是#define,因为您可以将它们放入不同的命名空间或类中(如上所示),这是预处理器无法处理的内容。

答案 1 :(得分:5)

您始终可以将枚举放在一个类中:

struct Score
{
     enum Method { None, AbsFromPerfect, ErrorSquared };
};

用法:

void foo(Score::Method m);

foo(Score::None);