6

我想在我的代码中的几个地方开始使用枚举,但我对编译器之前的声明有疑问。当前如何声明枚举对我来说最有意义:

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

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

我应该让所有东西都独一无二,还是使用命名空间?我想在一个类中使用枚举类型,而 NONE 是最具描述性的名称!

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

4

2 回答 2

11

在 C++11 之前的版本中,我使用了:

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

这意味着您始终拥有score_methods::type实际enum类型和score_methods::NONE值,等等。

此外,不,它们不仅仅是#defines,因为您可以将它们放入不同的名称空间或类(如上所示),这是预处理器无法执行/处理的事情。

于 2013-10-09T23:02:18.697 回答
5

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

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

用法:

void foo(Score::Method m);

foo(Score::None);
于 2013-10-09T23:01:57.220 回答