2015-12-11 2 views
1

я не знаю, если это возможно, но я постараюсь объяснить:C++ Получить значение переменной по каскадной имени переменной

У меня есть следующие переменные:

const char * VAR1 = "var1"; 
const char * VAR2 = "var2"; 

const char * VAR1_A = "etc1"; 
const char * VAR2_A = "etc2"; 

И то я объявляю std:vector и поместить переменные:

vector <const char *> v1; 
v1.push_back(VAR1); 
v1.push_back(VAR2); 

Тогда я перебирать вектора найти соответствие таким образом:

const char * param = "var1"; //Example parameter 

for(int x=0; x<v1.size(); x++){ 

    //Found a match in the vector 
    if(param == v1[x]){ 

     //HERE is the point. I need to get the value of variable "[v1[x](NAME)]_A" 
     //Something like: 
     const char * varname = getVarName(v1[x]) + "_A"; //This would contain VAR1_A 
     const char * varvalue = getVarValueByVarName(varname); //This would contain "etc1"; 
     break; 
    } 

} 

Является ли это хорошей аргументацией для моей проблемы или существует существующий метод для этого?

ответ

5

Просто используйте std::map<std::string, std::string>.

Таким образом, вы можете сделать что-то вроде этого:

map<string, string> myMap; 
myMap["var1"] = "var1_value"; 
myMap["var2"] = "var2_value"; 
//say now you get input into a variable named 'str' for what variable the user wants to print 
cout << myMap[str] << endl; 

Оператор [] добавит к карте, если ключ (в данном случае, строка) не существует, и изменит значение, если оно делает ,