考虑以下Java中的Enum类:
package com.gousslegend.deepov;
public enum Color
{
WHITE, BLACK;
private Color opposite;
static
{
WHITE.opposite = BLACK;
BLACK.opposite = WHITE;
}
public Color getOppositeColor()
{
return opposite;
}
}
由于
答案 0 :(得分:1)
如何用C ++ 11实现同样的目标?
在C ++中,你最好定义一个enum
,以及一个独立的功能:
enum Color {BLACK, WHITE};
Color getOppositeColor(Color c) {
static Color opposite[] = {WHITE, BLACK};
return opposite[c];
}
如果您准确地对Java进行建模,请创建一个包含两个静态成员BLACK
和WHITE
的类,并使用它而不是enum
。但是,使用会受到限制:例如,您无法在enum
个案例中使用switch
值。
是否可以使用C ++ 11的枚举方法?
没有
我应该将我的枚举放在一个带C ++的单独的类/文件中吗?
您应该将enum
定义和函数原型放在标题中;该函数的实现在一个单独的C ++文件中。
答案 1 :(得分:0)
C ++的枚举是简单的枚举值,它们不是完整的类(C ++中的枚举类只提供一些额外的类型安全性)。
我会采用以下方法来实现与此处使用Java的枚举相同的方法:
// Header file
class Color {
Color *opposite_p;
public:
Color(Color *opposite_pArg) : opposite_p(opposite_pArg) {}
Color &opposite() { return *opposite_p; }
static Color WHITE, BLACK;
};
// .C file
Color Color::WHITE(&BLACK);
Color Color::BLACK(&WHITE);
然后,Color::WHITE.opposite()
返回Color::BLACK
,COLOR::BLACK.oppsoite()
返回Color::WHITE
。