扩展枚举?

时间:2011-04-16 02:00:18

标签: c++ enums

假设我创建了一个枚举,但最终有人想要添加到枚举,那么一个人做什么? 例如:

blah.hpp
enum PizzaDressing {
DRESSING_OLIVES = 0,
DRESSING_CHEESE = 1
};

在我的FunkyPizza课程中,可能会有辣椒浇头。

那么如何在不明显修改原始枚举的情况下添加辣椒呢?

由于

4 个答案:

答案 0 :(得分:6)

这最接近你想要的:Base enum class inheritance

答案 1 :(得分:4)

由于枚举通常在编译器中被处理为某种大小的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
};

答案 2 :(得分:2)

这将被称为“动态枚举”。据我所知,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;

答案 3 :(得分:0)

您无法动态修改枚举,因为它只定义在编译时解析的新类型。它们是程序员的助记符,在编译时它们被翻译成数字。

也就是说,您可以使用原始枚举未使用的任何数字来表示您想要的任何数字:

PizzaDressing a;
a = (PizzaDressing)5;