CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
StringToEnumValue.h
Go to the documentation of this file.
1 #ifndef _CommonTools_Utils_StringToEnumValue_h_
2 #define _CommonTools_Utils_StringToEnumValue_h_
3 
4 
6 #include <Reflex/Reflex.h>
7 #include <string>
8 #include <sstream>
9 #include <vector>
10 
11 
24 template <class MyType>
25 int StringToEnumValue(const std::string & enumName){
26 
27  using namespace ROOT::Reflex;
28 
29  Reflex::Type rflxType = Reflex::Type::ByTypeInfo(typeid(MyType));
30  Reflex::Member member = rflxType.MemberByName(enumName);
31 
32  if (!member) {
33  std::ostringstream err;
34  err<<"StringToEnumValue Failure trying to convert " << enumName << " to int value";
35  throw cms::Exception("ConversionError",err.str());
36  }
37 
38  if (member.TypeOf().TypeInfo() != typeid(int)) {
39 
40  std::ostringstream err;
41  err << "Type "<< member.TypeOf().Name() << " is not Enum";
42  throw cms::Exception("ConversionError",err.str());
43  }
44  return Object_Cast<int>(member.Get());
45 
46 } //
47 
48 
70 template <class MyType>
71 std::vector<int> StringToEnumValue(const std::vector<std::string> & enumNames){
72 
73  using namespace ROOT::Reflex;
74  using std::vector;
75  using std::string;
76 
77  vector<int> ret;
78  vector<string>::const_iterator str=enumNames.begin();
79  for (;str!=enumNames.end();++str){
80  ret.push_back( StringToEnumValue<MyType>(*str));
81  }
82  return ret;
83 
84 } //
85 
86 #endif
int StringToEnumValue(const std::string &enumName)