2017-12-03 2 views
0

Ich versuche eine "Bedingungen" -Klasse zu schreiben, um zu überprüfen, ob eine gegebene Bedingung in einem RPG-Spiel wahr oder falsch ist.C++: Wie deklariere ich std :: -Funktionen, ohne Member-Funktionen zu erstellen

Conditions.h

#pragma once 
#include <functional> 
#include <vector> 
#include <iostream> 
class Conditions 
{ 
public: 
    bool check(int i); 
    void initialize(); 

private: 
    std::vector<std::function<bool()>> functions; 
}; 

Conditions.cpp

bool Conditions::check(int i) 
{ 
    if (i >= functions.size()) 
    { 
     std::cout << "Conditions::functions's size is " << functions.size() << " but you've tried to enter: " << i << std::endl; 
     return false; 
    } 
    else 
    { 
     return functions[i](); 
    } 
} 

void Conditions::initialize() 
{ 
    //Here I want to initialize all the conditions manually and push them 
    //into functions member variable. 
} 

die Frage ist, wie ich diese Funktionen erstellen können, ohne für jeden von ihnen neue Elementfunktionen zu schaffen (es wird höchstwahrscheinlich mehr als 200 Funktionen)

ist es möglich zu schreiben so etwas wie:

functions.push_back( 
    { 
    if(GameInfo::player.gold>200) return true; 
    else return false; 
    } 
); 

Antwort

1

Sie suchen wahrscheinlich für lambdas:

functions.push_back([this] 
{ 
    if (GameInfo::player.gold > 200) return true; 
    else return false; 
}); 

Wenn Sie tatsächlich keine Mitglieder der Conditions in der Funktion zugreifen müssen, dann können Sie auch entfernen Sie die this Capture vollständig :

functions.push_back([] 
{ 
    if (GameInfo::player.gold > 200) return true; 
    else return false; 
}); 

By the way, Ihre spezifische Funktion Beispiel kann so stark vereinfacht werden:

functions.push_back([] 
{ 
    return GameInfo::player.gold > 200; 
}); 
+0

ja, bearbeitete Version Ihrer Antwort passt viel besser zu meiner Verwendung. Ich entschied mich, alles in der Klasse "states" in "static" zu ändern, also gab [mir] Fehler, da es nicht mit static verwendet werden kann. Danke vielmals. –

Verwandte Themen