2016-03-22 3 views
0

Предположим, у меня много логических переменных (я пытаюсь создать текстовую приключенческую игру, и мне понадобится путь к расходяванию в зависимости от выбранных вариантов), есть ли простой способ проверить, равна ли данная строка равным имя инициализированной переменной или член инициализированной структуры? (Так что, например, я могу изменить переменную от ложной до истины?)Как проверить наличие переменной или члена структуры?

+0

Неа. После компиляции программы все эти красивые имена переменных исчезают и заменяются смещениями памяти. – user4581301

+2

Возможно, вам нужна 'std :: map ' в классе? – NathanOliver

+1

или 'std :: set '. – Jarod42

ответ

0

Быстрый пример использования std::map для борьбы с монстром.

std::map<std::string, bool> flags; 

определяет и присваивает список названных флагов, которые могут быть или не быть истинными. Этот список может быть использован

if (flags["key"]) 

ищет flags, чтобы узнать, существует ли «ключ». Если это так, отобразится отображаемое значение (true или false). Если этого не существует, и это большое различие, если вы знакомы с Java, «ключ» создается и устанавливается на значение по умолчанию (false в этом случае).

#include <iostream> 
#include <map> 

void slaymonster(std::map<std::string, bool> & flags) 
{ 
    //check if hero has sword of monster slaying 
    if (flags["has sword of monster slaying"]) 
    { 
     flags["monster slain"] = true; // sets key "monster slain" to true so 
             // hero can do stuff that requires 
             // monster to have been slain 
     std::cout << "Thou hast slain the monster!\n"; 
    } 
    else 
    { 
     std::cout << "Thou hast been slain by the monster!\nInsert coin to continue.\n"; 
    } 
} 

int main() 
{ 
    std::map<std::string, bool> flags; 

    std::cout << "Try to slay monster before finding sword\n"; 
    slaymonster(flags); 

    std::cout << "\nHero finds sword of monster slaying\n"; 
    flags["has sword of monster slaying"] = true; 
    std::cout << "Try to slay monster after finding sword\n"; 
    slaymonster(flags); 

    std::cout << "\nHero is mugged and loses sword of monster slaying\n"; 
    flags["has sword of monster slaying"] = false; 
    std::cout << "Try to slay monster after losing sword\n"; 
    slaymonster(flags); 
} 

Выход:

Try to slay monster before finding sword 
Thou hast been slain by the monster! 
Insert coin to continue. 

Hero finds sword of monster slaying 
Try to slay monster after finding sword 
Thou hast slain the monster! 

Hero is mugged and loses sword of monster slaying 
Try to slay monster after losing sword 
Thou hast been slain by the monster! 
Insert coin to continue. 
+0

Это потрясающе! Очень хорошо объяснено и очень интересный пример! Спасибо! – Nex

Смежные вопросы