获得c ++ 11枚举类功能,在类

时间:2016-02-04 08:52:57

标签: c++ c++11 enums

我目前有许多经典枚举,以及带有相应字符串的静态数组(例如,用于(从)到XML的序列化)

namespace MyAppCommon
{
    enum Fruit { Banana, Apple, Orange};
    static const char * const fruitString[] = { "banana", "apple", "orange" };
}

为了避免增加名称冲突,我想使用c ++ 11 enum class来避免设置虚拟或冗余的枚举名称,例如MyAppCommon::Fruit::eMyAppCommon::Fruit::Fruit

但是我如何将静态数组保留在类中呢?如:

struct Fruit:
{
    enum e { Banana, Apple, Orange};
    static const char * const string[] = { "banana", "apple", "orange" };
    e value;
}

这种方法的问题在于,我需要重新实现operator =,operator ==等...才能直接使用枚举成员项,并且不会使代码更好。< / p>

1 个答案:

答案 0 :(得分:3)

要么一直走下去并实施你的黑客攻击(会像你说的那样做一些工作)或保持简单。枚举类不允许有成员字段或方法。

enum class Fruit {
    Banana, Apple, Orange
}
const char* FruitNames = {"Banana", "Apple", "Orange"};
const char* ToString(Fruit fruit) { ... }
Fruit FromString(const char* Name) { ... }

为每个枚举命名ToString和FromString,模板友好性相同。

相关问题