首先,英语不是我的第一语言。如果您需要解释更多的东西,请询问。
我想做的是创建一个扩展枚举使用的类。说你有
enum Color
{ red,
green,
blue };
我想创建一个类,所以我可以创建一个像
这样的对象CustomEnum myEnum("red",
"green",
"blue",
"The house is red",
"The tree is green",
"The car is blue");
这样,我可以打电话给
myEnum.getString(red);
使用自定义函数,它将返回“房子为红色”的映射值。但是我有很多我想写的函数,并且有许多枚举。
CustomEnum mySecondEnum("pizza",
"soup",
"eggs",
"burger",
"The pizza is hot",
"The soup has gone cold",
"The eggs are bad",
"The burger has cheese");
请注意,两个枚举的大小不同,但CustomEnum并不关心。
我已经做了大量的谷歌搜索,并提出要么这不能做(因为枚举是在编译时制作的),或者我在谷歌搜索错误的东西。在这一点上,我想确认这是不可能的,或者有人可以指出我正确的方向。
答案 0 :(得分:1)
鉴于你......
enum Colour { red, green, blue };
您可以创建单独的映射:
std::map<Colour, std::string> colour_strings = {
{ red, "red" }, { green, "green" }, { blue, "blue" }
// or if you like...
{ red, "The house is red" }, { green, "The tree is green" },
{ blue, "The car is blue" }
};
然后,您可以在代码中查找字符串:
Colour my_colour = green;
std::cout << colour_strings[my_colour] << '\n';
有各种各样的&#34;技巧&#34; C ++开发人员用来简化这一过程,包括:
#define X(NAME) { NAME, #NAME }
std::map<Colour, std::string> colour_strings = {
X(red), X(green), X(blue)
};
...和...
colours.h
X(red)
X(green)
X(blue)
the_app.cc
// include once to create enum itself...
#define X(IDN) IDN,
enum Colours {
#include "colours.h"
something_for_after_last_comma
};
// include again to create colour string mappings...
#define X(IDN) { IDN, #IDN }
std::map<Colour, std::string> colour_strings = {
#include "colours.h"
};