Java和C ++ 11中的枚举方法?

时间:2014-08-30 23:47:24

标签: c++ c++11 enums

考虑以下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;
    }
}
  • 如何使用C ++ 11实现相同的功能?
  • 是否可以使用C ++ 11的枚举方法?
  • 我应该将我的枚举放在一个单独的C ++文件/文件中吗?

由于

2 个答案:

答案 0 :(得分:1)

  

如何用C ++ 11实现同样的目标?

在C ++中,你最好定义一个enum,以及一个独立的功能:

enum Color {BLACK, WHITE};
Color getOppositeColor(Color c) {
    static Color opposite[] = {WHITE, BLACK};
    return opposite[c];
}

如果您准确地对Java进行建模,请创建一个包含两个静态成员BLACKWHITE的类,并使用它而不是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::BLACKCOLOR::BLACK.oppsoite()返回Color::WHITE