扩展枚举?

| 假设我创建了一个枚举,但最终有人想要向该枚举添加项目,那么该做什么? 例如:
// blah.hpp

enum PizzaDressing {
    DRESSING_OLIVES = 0,
    DRESSING_CHEESE = 1
};
在我的FunkyPizza课上,可能会有胡椒馅料。 那么,如何在不明显修改原始枚举的情况下添加胡椒呢? 谢谢。     
已邀请:
由于枚举通常在编译器中以int的某种大小处理,因此您以后要做的就是
enum PizzaDressing
{
    Olives = 0,
    Cheese = 1,
    Pepperoni = 2
};
或者你可以让它计数
enum PizzaDressing
{
    Olives = 0,
    Cheese = 1,
    Pepperoni
};
如果由于某种原因两者都不可接受,则可以使用数学(
Cheese + 1
)。 您几乎可以使用数值来以任何方式使用枚举。 请注意,您使用的枚举器通常是由编译器编译到代码中的,它不会显示为名称,只是值。因此,以后修改(扩展)枚举器不会影响已构建的代码。 我认为在带枚举的另一个枚举器中使用枚举是合法的语法,但是我从未尝试过。这可能有效,但是有点难看:
enum PizzaDressing
{
    Olives = 0,
    Cheese = 1
};

enum OtherPizzaDressings
{
    Start = (OtherPizzaDressings)PizzaDressing::Cheese;
    Pepperoni
};
    
这与您想要的最接近:基枚举类继承     
那将被称为“动态枚举”。据我所知,C ++中没有这样的东西。但是,由于我们使用的是C ++,而不是C,因此您可以执行以下操作:
#include <string>
#include <map>

std::map<std::string, int> myMap;
myMap[\"DRESSING_OLIVES\"] = 0;
myMap[\"DRESSING_CHEESE\"] = 1;
myMap[\"PEPPER_TOPPING\"] = 2;
    
您无法动态修改枚举,因为它仅定义在编译时解析的新类型。它们是程序员的助记符,在编译时它们被转换为数字。 也就是说,您可以使用原始枚举未使用的任何数字来表示您想要的任何内容:
PizzaDressing a;
a = (PizzaDressing)5;
    

要回复问题请先登录注册