beste möglichkeit? (if anweisungen..)
-
ich benutze eine serversocket componente. wenn diese text erhält, sind das commands die ausgeführt werden sollen. wie soll ich die abfrage machen ob ein command dabei ist? das ganze via if anweisungen? also so:
if(command == "blaah1") { // ausführen... } if(command == "blaah2") { // ausführen... } if(command == "blaah3") { // ausführen... } if(command == "blaah4") { // ausführen... } if(command == "blaah5") { // ausführen... } if(command == "blaah6") { // ausführen... }
ich finde das sieht unprofessionel aus und dazu auch scheisse. gibt es für sowas eine bessere variante?
-
Du solltest ab dem zweiten if "else if" hinschreiben.
-
Häng noch ein "else" dazwischen, damit Du nicht alle Abfragen durchläufst.
Ich fürchte, eine andere Methode, als ein if..else-Konstrukt zu verwenden gibt es nicht. switch kann hier nicht angewendet werden. Man könnte sich vielleicht eine eigene Klasse basteln, die auf Messages reagiert, aber das wäre wohl etwas overdone...
-
Ich würde alle Strings in einen Container wie std::map einfügen. Als Schlüssel den String und als Wert einen Funktionszeiger. Dann brauchst du nur noch die passende Funktion zum String aufrufen.
FunctionMap[EingabeString]();
-
Hi!
Es gäbe vielleicht noch eine andere Methode. Du könntest die if - Anweisungen
mit dem ? Operator vereinfachen. Ich weiß aber nicht, ob das in deinem Beispiel
geht. Vielleicht kennst du ihn ja schon. Egal, ich schreibe einfach mal ein paar Beispiele wie man ihn nutzt:
1.
if (a > 10)
x = 2;
else
x = 1;
wird zu:
x = (a > 10)?2:1;
2.
if (a < 0) return(-1);
if (a > 0) return(1);
return(0);
wird zu:
return((a < 0)?-1:((a > 0)?1:0));
-
sorry natürlich kommt da kein smiley hin. Sondern ein :
-
Original erstellt von <Matze>:
**Ich würde alle Strings in einen Container wie std::map einfügen. Als Schlüssel den String und als Wert einen Funktionszeiger. Dann brauchst du nur noch die passende Funktion zum String aufrufen.FunctionMap[EingabeString]();**
hey das klingt garnicht mal so übel. kannst mir da nen kleines beispiel machen damit ich mir dann genauer vorstellen kann wie ich an das eingemachte ran muss?
-
#include <iostream> #include <map> #include <string> typedef void (*FUNCTIONPOINTER)(); void blaah1() { std::cout << "blaah1" << std::endl; } void blaah2() { std::cout << "blaah2" << std::endl; } void blaah3() { std::cout << "blaah3" << std::endl; } int main() { std::map<std::string, FUNCTIONPOINTER> FunctionMap; FunctionMap["blaah1"] = blaah1; FunctionMap["blaah2"] = blaah2; FunctionMap["blaah3"] = blaah3; std::cout << "Welches Kommando soll ausgeführt werden?" << std::endl; std::string strCommand; std::cin >> strCommand; FunctionMap[strCommand](); std::cin.get(); return 0; }
-
Hi
Ist zwar etwas OT, aber in welchem Buch stehen derartige "Denkanstösse" beschrieben, ich lese derzeit OOP für Dummies (recht guter Bezug zur Praxies).
Ich habe nämlich noch Schwierigkeiten den Sprachumfang vernünftig/effizient an zuwenden. Vor allem das Lesen von fremdem Quellcode hilft mir auf eigene Ideen zu kommen.mfg pera
-
du hast dir die antwort schon selbst gegeben, wenn du über den anfänger hinaus bist, helfen kaum noch bücher ausser referenzen. den rest holst du dir aus anderem code(denkanstösse mein ich, nicht klauen)