Enums inside of a C++ class
我正在尝试使用一个类,该类在类内声明了枚举类型,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 | class x { public: x(int); x( const x &); virtual ~x(); x & operator=(const x &); virtual double operator()() const; typedef enum { LINEAR = 0, /// Perform linear interpolation on the table DIPARABOLIC = 1 /// Perform parabolic interpolation on the table } XEnumType; }; |
我需要声明这个类的一个实例并初始化枚举类型。我来自C,通常会看到在类外部声明的枚举,而不是在类内部声明的枚举。如何初始化枚举类型。例如,我想这样做:
1 2 | x myX(10); myX.XEnumType = Linear; |
号
显然这不起作用。我该怎么做?
首先,您需要在类中声明一个类型为
1 2 3 4 5 6 7 8 9 10 11 | class x{ //Your other stuff XEnumType myEnum; }; int main(void) { x myNewClass(); x.myEnum = x::LINEAR; } |
第一:不要使用
1 2 3 4 | enum XEnumType { LINEAR = 0, /// Perform linear interpolation on the table DIPARABOLIC = 1 /// Perform parabolic interpolation on the table }; |
号
简而言之,像你那样做的行为基本上是一样的,但在神秘的角落里情况会有所不同。您使用的语法将与我在上面仅在C中使用的语法有很大的不同。
第二:这只是定义了一个类型。但您要定义该枚举的对象。这样做:
1 | XEnumType e; |
总之:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class x { /* ... stays the same ... */ enum XEnumType { LINEAR = 0, /// Perform linear interpolation on the table DIPARABOLIC = 1 /// Perform parabolic interpolation on the table }; XEnumType e; }; void someFunction() { x myX(10); myX.e = x::LINEAR; } |
。
1 2 3 4 5 6 7 8 9 10 11 12 13 | enum XEnumType { LINEAR, DIPARABOLIC }; class x { public: x(int); x( const x &); virtual ~x(); x & operator=(const x &); virtual double operator()() const; XEnumType my_enum; }; |
。
使用:
1 2 | x myX(10); myX.my_enum = LINEAR; |
号
您声明了一个新类型:XenumType。必须在X类内创建该类型的字段。.例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class x { public: x(int); x( const x &); virtual ~x(); x & operator=(const x &); virtual double operator()() const; typedef enum { LINEAR = 0, /// Perform linear interpolation on the table DIPARABOLIC = 1 /// Perform parabolic interpolation on the table } XEnumType; public: XenumType type; }; |
然后您可以通过以下方式访问它:
1 2 | x foo(10); foo.type = LINEAR; |
。
让我先假设一些先决条件:
- 类
x 来自第三方库,因此不能更改。 - 类
x 在枚举的帮助下定义了一些整型常量。 - 类
x 应该用一个常量LINEAR 或DIPARABOLIC 初始化。
小精灵
您的问题是这些常量值是在类
而不是
1 2 | x myX(10); myX.XEnumType = Linear; |
号
尝试
1 | x myX(x::LINEAR); |
号
通过指定
这条线
1 2 3 4 | typedef enum { LINEAR = 0, /// Perform linear interpolation on the table DIPARABOLIC = 1 /// Perform parabolic interpolation on the table } XEnumType; |
。
定义了一个名为
1 2 3 4 5 | enum XEnumType { LINEAR = 0, /// Perform linear interpolation on the table DIPARABOLIC = 1 /// Perform parabolic interpolation on the table }; |
现在,您需要在类中定义此类型的成员
1 | XEnumType _eType; |
。
在构造函数中,然后可以初始化为
1 | x::x(int ) : _eType(x::LINEAR) {} |