我正在为我正在研究的课程使用枚举,并且正在使用 Google 查找示例以确保我正确使用了枚举。我去了几个站点,包括 MSDN 站点,枚举列在公共而不是私有下。我一直认为数据成员是私有的。我离开基地了吗?如果是,为什么?
问问题
1508 次
4 回答
18
枚举是一种类型,而不是数据成员。如果该课程的用户需要了解它,您应该将其公开;否则,将其设为私有。用户需要了解它的典型情况是当它用作公共成员函数的参数类型时。
于 2012-08-14T16:39:10.153 回答
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;
}
于 2012-08-14T16:42:49.343 回答
3
这些枚举可能在类接口中使用,对吧?否则,保留它们确实会更清洁private
于 2012-08-14T16:39:26.580 回答
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
充当返回值。
于 2012-08-14T18:41:09.323 回答