2016-03-22 6 views
0

Sagen wir, ich habe viele boolesche Variablen (Ich versuche ein textbasiertes Adventurespiel zu machen und ich werde den Pfad benötigen, um abhängig von den gewählten Optionen zu divergieren), gibt es eine einfache Möglichkeit zu überprüfen, ob eine gegebene Zeichenkette gleich ist ein Name einer initialisierten Variable oder ein Mitglied einer initialisierten Struktur? (So ​​dass ich zum Beispiel die Variable von false zu true ändern kann?)Wie überprüft man die Existenz einer Variablen oder eines Members einer Struktur?

+0

Nope. Sobald das Programm kompiliert ist, sind alle diese schönen Variablennamen verschwunden und durch Speicher-Offsets ersetzt. – user4581301

+2

Vielleicht möchten Sie eine 'std :: map ' in der Klasse? – NathanOliver

+1

oder 'std :: set '. – Jarod42

Antwort

0

Ein schnelles Beispiel für die Verwendung von std::map, um ein Monster zu bekämpfen.

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

definiert und weist eine Liste von benannten Flags zu, die wahr sein können oder nicht. Diese Liste kann

if (flags["key"]) 

sieht in flags verwendet werden, um festzustellen, ob „Schlüssel“ existiert. Wenn dies der Fall ist, wird der zugeordnete Wert (true oder false) zurückgegeben. Wenn es nicht existiert und dies ein großer Unterschied ist, wenn Sie mit Java vertraut sind, wird "Schlüssel" erstellt und auf den Standardwert gesetzt (false in diesem Fall).

#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); 
} 

Ausgang:

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

Das ist großartig! Sehr gut erklärt und ein sehr relevantes Beispiel auch! Vielen Dank! – Nex

Verwandte Themen