扩展枚举



假设我创建了一个enum,但最终有人想向该enum添加项,该怎么办?例:

// 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
};

如果由于某种原因这两种方法都不能接受,您可以使用math (Cheese + 1)。几乎可以用任何处理数值的方法来处理枚举。

请注意,您使用的枚举数通常由编译器嵌入到代码中,它不显示为其名称,仅显示为值。因此,稍后修改(扩展)枚举数将不会影响已构建的代码。

我认为在另一个枚举器中使用枚举是合法的语法,但我从未尝试过。这可以工作,但有点难看:

enum PizzaDressing
{
    Olives = 0,
    Cheese = 1
};
enum OtherPizzaDressings
{
    Start = (OtherPizzaDressings)PizzaDressing::Cheese;
    Pepperoni
};

这就是所谓的"动态enum"。据我所知,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;

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

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

PizzaDressing a;
a = (PizzaDressing)5;

相关内容

  • 没有找到相关文章

最新更新