封装私有枚举

时间:2009-12-03 01:48:17

标签: c++ enums

以前我已经定义了枚举类型,这些类型在类的头文件中是私有的。

private:
  enum foo { a, b, c };

但是,我不想再露出枚举的细节了。在实现中定义枚举类似于定义类不变量吗?

const int ClassA::bar = 3;
enum ClassA::foo { a, b, c };

我想知道这是否是正确的语法。

2 个答案:

答案 0 :(得分:9)

C ++没有枚举的前向声明,因此您无法将枚举“type”与枚举“implementation”分开。

以下内容可以在C ++ 0x中使用:

// foo.h
class foo {
   enum bar : int; // must specify base type
   bar x; // can use the type itself, members still inaccessible
};

// foo.cpp
enum foo::bar : int { baz }; // specify members

答案 1 :(得分:2)

不,enum ClassA::foo { a, b, c };语法不正确。

如果要将枚举移出标题并进入实现(.cpp)文件,那么就这样做。如果你想使用enum作为类的方法的参数类型,那么你就不能移动它,所以只需将它保密。