我想在我的代码中的几个地方开始使用枚举,但是我对编译器的先前声明有一个问题。目前声明枚举的方式对我来说最有意义:
避免这种情况的最佳方法是什么?
enum score_methods_t {NONE,ABS_FROM_PERFECT,ERROR_SQUARED};
enum scale_methods_t {NONE,CASES_MULTIPLIER,RANGE_MULTIPLIER};
我应该只使用命名空间使所有内容都是唯一的吗?我想在类中使用枚举类型,NONE是最具描述性的名称!
枚举冲突的原因也是因为基本上只是#defines在引擎盖下?
答案 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);