字符串的Enum等价物

Rah*_*hul 1 c c++ string enums

我研究了枚举,它只需要整数输入并返回相应的值.我想实现同样的东西,但我只有字符串作为输入.我想做以下工作 -

enum Types {
"Absolute", //"abs"
"PURE", //"PRE"
"MIXED" //"MXD"
}
Run Code Online (Sandbox Code Playgroud)

可能的陈述可能是 -

string sTpes = Types("abs"); //this should return "Absolute"
Run Code Online (Sandbox Code Playgroud)

要么

string sTpes = Types("MXD"); //this should return "MIXED"
Run Code Online (Sandbox Code Playgroud)

如果不使用枚举,请建议我实现这一目标的可能方法.

谢谢.

Seb*_*ach 5

没有"string-enums",但是要从一个值映射到另一个值,您可以使用std::map,这是C++平台附带的标准模板:

#include <map>
#include <string>

int main() {
    using std::map;  using std::string;

    map<string, string> ss;
    ss["abs"] = "Absolute";

    const string foo = ss["abs"];
    std::cout << ss["abs"] << ", or " << foo << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

在C++ 0x中,如果你想要"安全"访问,如果没有找到密钥类型则抛出异常,使用map::at(实际上,afair,缺乏map::at只是当前标准的疏忽):

    std::cout << ss.at("weird keY");
Run Code Online (Sandbox Code Playgroud)

或检查它是否存在:

    if (ss.find("weird keY")==ss.end())
        std::cout << "key not found\n";
Run Code Online (Sandbox Code Playgroud)