gpt4 book ai didi

c++ - 是否有 C++ 库来创建强大的枚举?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:13:53 25 4
gpt4 key购买 nike

理想情况下,我希望下面的示例能够工作,但我猜其中一些无法在 C++ 中实现。

{
typedef StrongEnum<Red=0, Green=1, Blue=2> Color; // not a C++ syntax
Color c = Color::Red; // static const
Color d; //error: default constructor is private
Color d = c;
Color e = Color::OfInt(5); // ifdef DEBUG - Runtime error: Enum out of range

int sum = 0;

// I do have these macros, but separate for each enum - FOREACH_COLOR(c)
FOREACH_ENUM (Color c) {
sum += c.ToInt ();
}

ArrayMap<Color, string> map; // Internally this is const size array, possible
map [Color::Red] = "red"; // because Color have static const Limit = 3 inisde.

// Advanced: EnumPair does bitpacking.
// currently I implement it manually for every pair of Enum's I need.
typedef EnumPair <door=Color, window=Color> ColorPair; // I guess I can't get this, can I?
ColorPair pair (door = Color::Red, window = Color::Green); // I guess I can't give the labels here or one line above, can I?
Color w = pair.window;
Color w = pair.window ();
}

我经常使用它们,目前我从头开始编写每一个。我知道一个完整的通用解决方案是一个梦想,所以我欢迎任何部分解决方案。也许有人创建了一个库或代码生成器?

更新 1:

Thisthis问题是相关的。我正在研究可以用它们解决哪些问题。

最佳答案

这是我想出来的:

#include <cstdio>
#include <string>
#include <map>

namespace Color
{
typedef enum
{
Red = 0,
Green = 1,
Blue = 2
} Color;

Color colors[] = {Red, Green, Blue}; // same order as above,
//to preserve index.

//int colors_len = sizeof(colors)/sizeof(Color);
// (if you want to check for valid values)

static inline Color OfInt(int value)
{
// if(value >= colors_len) do error thing;
return colors[value];
}
}

int main()
{
Color::Color c = Color::Red;

printf("%d,", c);

c = Color::OfInt(1);

printf("%d,", c);

c = Color::Blue;

printf("%d\n", c);

std::map<Color::Color, std::string> map;

map[Color::Red] = "red";

return 0;
}

至少它有一些你想要的行为。这是否缺少您需要的东西?

它用 g++ 4.3.3 编译,似乎工作正常。

我做了命名空间的事情,将枚举放在不同的范围内。 (这样红色就不会被带走等等)也许你可以把它分解成你可以使用的东西? :)

如果你想在那个命名空间之外使用 Color::Color,你可以这样做:

typedef Color::Color ColorEnum;

但不幸的是,名称 Color 被命名空间占用了。

关于c++ - 是否有 C++ 库来创建强大的枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1630042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com