Как посмотреть тип ENUM по заданной строке?

У меня есть класс enum, как это:

class ContentTypeEnum {

public:

// it might have more types
enum Code { TEXT, XML, APPLICATION_JSON};

static const char* to_c_str(unsigned);

};

Я использовал это в своем коде, как сейчас.

ContentTypeEnum::APPLICATION_JSON

Постановка задачи:-

Теперь у меня есть заданная строка, поэтому мне нужно использовать эту строку и затем найти фактический тип ENUM, выполнив итерацию по моему перечислению выше.

Ниже мой код:

cout<<"Given String: " << data_args->pp_args->ter_strings[0].c_str() << endl;
const char* test_str = data_args->pp_args->ter_strings[0].c_str();

Сейчас если test_str является xml или же XMLтогда мне нужно установить это так:

TestClass::SetContentType(ContentTypeEnum::XML)

Но если test_str является application_json или же APPLICATION_JSONтогда мне нужно установить это так:

TestClass::SetContentType(ContentTypeEnum::APPLICATION_JSON)

И так же и для других. Ниже мой полный код:

cout<<"Given String: " << data_args->pp_args->ter_strings[0].c_str() << endl;
char* test_str = data_args->pp_args->ter_strings[0].c_str();

// look up the exact ContentType from the enum using test_str string
// and then set it to below method.
TestClass::SetContentType(set_it_here_basis_on_string_test_str)

Если кто-то передает какую-то неизвестную строку, которой нет в моем перечислении, то она должна использовать по умолчанию как TestClass::SetContentType(ContentTypeEnum::APPLICATION_JSON)

Как правильно искать точный тип перечисления по заданной строке?

0

Решение

Я предлагаю написать функцию, которая возвращает enum дали строку.

Code getCode(std::string const& s)
{
static std::map<std::string, Code> theMap{{"TEXT", TEXT},
{"XML", XML}
{"APPLICATION_JSON", APPLICATION_JSON}};

std::map<std::string, Code>::iterator it = theMap.find(s);
if ( it != theMap.end() )
{
return it->second;
}
return APPLICATION_JSON;
}
4

Другие решения