Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
typedef bool (*fnCall)(std::string const&); // sample function bool Message(std::string const& arg) { std::cout << arg << std::endl; return std::cout; } // map with registered functions std::map<std::string, fnCall> registered_function; registered_function.insert(std::make_pair("Message", &Message)); // read file std::ifstream file_stream("script.txt"); std::string line; while (std::getline(file_stream, line)) { // befehl aus zeile schneiden const std::string::size_type pos (line.find('(')); if (pos == std::string::npos) { std::cerr << "FEHLER: Ungültiges Script!" << std::endl; return false; } // gucken ob befehl vorhanden const std::map<std:.string, fnCall>::const_iterator it(registered_function.find(line.substr(0, pos))); if (it == registered_function.end()) { std::cerr << "FEHLER: Unbekannter Befehl \"" << line.substr(0, pos) << "\"!" << std::endl; return false; } // registrierte funktion ausführen (*it->second)(line.substr(pos + 1, line.length() - pos - 1)); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
namespace interface { struct function { virtual ~function() {} bool operator()(std::string const&) { return true; } }; }; // interface class Message : public interface::function { public: bool operator()(std::string const& arg) { return std::cout << arg << std::endl; } }; |
Anonymous
unregistriert
Siehst du da irgendein Problem?Zitat von »"Toa"«
mhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
*Überfordert ist* ... ich hatte mir das alles ein wenig einfacher vorgestellt..einfach die Zeile einlesen auf ihre Fkt reduzieren und durch map auf die richtige Fkt zugreifen...
Anonymous
unregistriert
Methodenpointer sind schon was anderes als Funktionspointer, hierfür empfiehlt sicht boost::bind.Zitat von »"Toa"«
Ja irgend ein Problem tritt da auf das man das ganze in keine Methode packen kann aber so ganz hab ich das net verstanden. Könnte Developer vielleicht näher ausführen xD
Werbeanzeige