封装私有枚举

发布于 2024-08-13 10:01:00 字数 241 浏览 3 评论 0原文

之前我已经在类的头文件中定义了私有的枚举类型。

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

但是,我不想再暴露枚举的详细信息。在实现中定义枚举是否与定义类不变量类似?

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

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

Previously I've defined enumerated types that are intended to be private in the header file of the class.

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

However, I don't want the details of the enum exposed anymore. Is defining the enum in the implementation similar to defining class invariants?

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

I'm wondering if this the correct syntax.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

东京女 2024-08-20 10:01:01

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

在 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

C++ doesn't have forward declarations of enums, so you can't separate enum "type" from enum "implementation".

The following will be possible in 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
只想待在家 2024-08-20 10:01:01

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

如果您想将枚举从标头移出并移至实现 (.cpp) 文件中,则只需执行此操作即可。如果你想使用枚举作为类方法的参数类型,那么你不能移动它,所以只需将其保留为私有即可。

No, enum ClassA::foo { a, b, c }; is not correct syntax.

If you want to move the enum out of the header and into the implementation (.cpp) file, then just do that. If you want to use the enum for parameter types of methods of the class, then you cannot move it, so just leave it private.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文