我目前有许多经典枚举,以及带有相应字符串的静态数组(例如,用于(从)到XML的序列化)
namespace MyAppCommon
{
enum Fruit { Banana, Apple, Orange};
static const char * const fruitString[] = { "banana", "apple", "orange" };
}
为了避免增加名称冲突,我想使用c ++ 11 enum class
来避免设置虚拟或冗余的枚举名称,例如MyAppCommon::Fruit::e
或MyAppCommon::Fruit::Fruit
但是我如何将静态数组保留在类中呢?如:
struct Fruit:
{
enum e { Banana, Apple, Orange};
static const char * const string[] = { "banana", "apple", "orange" };
e value;
}
这种方法的问题在于,我需要重新实现operator =,operator ==等...才能直接使用枚举成员项,并且不会使代码更好。< / p>
答案 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,模板友好性相同。