C++将多个字符串转换为枚举

C++将多个字符串转换为枚举,c++,string,boost,types,enums,C++,String,Boost,Types,Enums,我正在处理一个遗留代码库,其中头文件定义了5个字符串,如下所示: #define NUM_STRINGS 5 extern string string_0; extern string string_1; extern string string_2; extern string string_3; extern string string_4; 在其他地方的cpp文件中: string string_0 = make_string("my_string_0"); string string_

我正在处理一个遗留代码库,其中头文件定义了5个字符串,如下所示:

#define NUM_STRINGS 5
extern string string_0;
extern string string_1;
extern string string_2;
extern string string_3;
extern string string_4;
在其他地方的cpp文件中:

string string_0 = make_string("my_string_0");
string string_1 = make_string("my_string_1");
string string_2 = make_string("my_string_2");
string string_3 = make_string("my_string_3");
string string_4 = make_string("my_string_4");
现在在代码库中,这些字符串被用作函数参数,因为我们有一个函数void funcstring str,其中str总是这5个字符串中的一个。有没有一种方法可以将这些字符串放入一个类型,比如string_enum

将以[接近]零的成本从类型中获取正确的字符串

保证有人不能打电话给世界

允许我获取枚举中的元素数

还有什么有用的吗

有没有一种方法可以将这些字符串放入一个类型,比如string_enum

将以零成本从类型中获取正确的字符串 不是真正的零成本,但相当有效:使用std::map:

允许我获取枚举中的元素数
字符串字符串\u 0=新字符串我的字符串\u 0;-你不能有这样的代码——它不会编译。发布真实代码。首选常量unsigned int NUM_STRINGS=5;要定义NUM_STRINGS 5,并且在任何时候有编号为1到N的变量,您真正需要的是一个由N个元素组成的数组。不要在头中使用namespace std。@NeilButterworth字符串是在我还没有找到的某个函数中静态构造的。新的是不正确的,我认为使用std::set更容易实现。它消除了对enum entirelyI的需要,就像这样,尽管我不会将enum作为键,将字符串作为值吗?@Robert取决于您的需要。你的问题听起来就像你需要它。
enum my_enum {
    my_string_0 ,
    my_string_1 ,
    my_string_2 ,
    my_string_3 ,
    my_string_4
};

const std::map<std::string,my_enum> enumMap = {
    { "my_string_0" , my_string_0 } ,
    { "my_string_1" , my_string_1 } ,
    { "my_string_2" , my_string_2 } ,
    { "my_string_3" , my_string_3 } ,
    { "my_string_4" , my_string_4 }
};
void func(const std::string key) {
    if(enumMap.find(key) == std::end(enumMap)) {
        throw std::invalid_argument("key");
    }
}
std::size_t getNumKeys() {
    return enumMap.size();
}