我正在使用enum进行我正在处理的课程,我正在使用Google查找示例以确保我正确使用枚举。我去了几个网站,包括MSDN网站和枚举列在公共而不是私人。我一直认为数据成员是私有的。我是不是基地,如果是这样的话为什么?
答案 0 :(得分:18)
枚举是一种类型,而不是数据成员。如果班级的用户需要了解它,你应该公开它;否则,将其设为私有。用户需要了解它的典型情况是它被用作公共成员函数的参数类型。
答案 1 :(得分:4)
枚举不是数据成员,它们是常量/类型。如果您不公开它们,那么其他类不能使用枚举名称与定义enum
的类进行交互:
class A {
public:
void func(enumtype e) { if (e == e1) dostuff(); }
private:
typedef enum {e1, e2} enumtype;
};
int main() {
A a;
a.func(e1); // error: enumtype is private, e1 is not visible here
return 0;
}
答案 2 :(得分:3)
这些枚举可能在类接口中使用,对吧?否则,保持private
答案 3 :(得分:1)
公开enum
数据在模板元编程中大量使用(请参阅Boost.MPL)
#include <iostream>
template <int N>
struct Factorial {
enum { value = N * Factorial<N - 1>::value };
};
template <>
struct Factorial<0> {
enum { value = 1 };
};
int main()
{
auto const f10 = Factorial<10>::value; // done at compile-time
std::cout << f10 << "\n"; // prints 3628800
return 0;
}
Ideone上的输出。这里公开使用enum
的原因是结构是用于将中间计算传输到顶级调用者的简单工具,并且不需要封装。它是编译时函数评估的粗略形式,其中struct
充当函数范围,enum
充当返回值。