如何在给定字符串的情况下查找ENUM类型?

时间:2015-04-21 21:56:57

标签: c++ enums c-str

我有一个这样的枚举类:

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_strxmlXML,那么我需要像这样设置:

TestClass::SetContentType(ContentTypeEnum::XML)

但如果test_strapplication_jsonAPPLICATION_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)

在给定字符串的情况下查找确切枚举类型的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

我建议编写一个函数,在给定字符串的情况下返回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;
}