【发布时间】:2010-09-09 10:37:09
【问题描述】:
我正在尝试执行以下操作:
enum E;
void Foo(E e);
enum E {A, B, C};
编译器拒绝的。我快速浏览了谷歌,共识似乎是“你做不到”,但我不明白为什么。谁能解释一下?
澄清 2:我这样做是因为我在一个采用所述枚举的类中有私有方法,并且我不希望暴露枚举的值 - 例如,我不希望任何人知道 E 已定义作为
enum E {
FUNCTIONALITY_NORMAL, FUNCTIONALITY_RESTRICTED, FUNCTIONALITY_FOR_PROJECT_X
}
因为我不想让我的用户知道项目 X。
所以,我想转发声明枚举,这样我就可以将私有方法放在头文件中,在 cpp 内部声明枚举,并将构建的库文件和头分发给人们。
至于编译器 - 它是 GCC。
【问题讨论】:
-
这么多年了,不知何故 StackOverflow 引诱我回来 ;) 作为事后建议 - 只是不要这样做 尤其是在场景中你描述。我更愿意定义一个抽象接口并向用户公开这个接口,并将枚举定义和所有其他实现细节与内部实现保持一致,而我这边没有其他人看到,让我可以随时随地做任何事情,并完全控制用户何时看到任何东西。
-
如果您阅读了已接受的答案,那么自 C++11 以来这是完全可能的。