Löse folgende Gleichung: RTTI=evil



  • TdZ schrieb:

    Ich werd das jetzt einfach mit nem Singleton-Pattern lösen...

    Er. Ja, Singletons, gute Wahl. Singletons sind meist die sauberste Lösung für alles, und jeder der behauptet dass sie gleich böse wie globale Variablen sind, hat natürlich keine Ahnung wovon er redet! (Achtung: mindestens einer der vorangegangenen Sätze könnte Ironie enthalten)



  • Oh ja... ist schon schade, wenn Ironie nicht rechtzeitig erkannt wird!



  • ja, wenn man sigletons richtig anwendet, sind sie immer ok.

    struct Globals
    {
      int anzahlSpieler;
      string ipAdresse;
      Drucker* drucker;
      ofstream* logfile;
      /* weitere 250 zeilen */
      bool wantExit;
    };
    Globals& Singleton::getTheGlobals();
    

    ;
    und in der main dann

    while(true)
    {
    ...
      if(Singleton::getTheGlobals().wantExit())
        exit(0);
    ...
    }
    

    das ist viel besser als globale variablen. hab aber gerade vergessen, warum das so war. 🤡



  • volkard schrieb:

    ja, wenn man sigletons richtig anwendet, sind sie immer ok.

    struct Globals
    {
      int anzahlSpieler;
      string ipAdresse;
      Drucker* drucker;
      ofstream* logfile;
      /* weitere 250 zeilen */
      bool wantExit;
    };
    Globals& Singleton::getTheGlobals();
    

    ;
    und in der main dann

    while(true)
    {
    ...
      if(Singleton::getTheGlobals().wantExit())
        exit(0);
    ...
    }
    

    das ist viel besser als globale variablen. hab aber gerade vergessen, warum das so war. 🤡

    Weil man die Entwicklungszeit durch zusätzliche Schreibarbeit verlängern kann. 🤡



  • volkard schrieb:

    das ist viel besser als globale variablen. hab aber gerade vergessen, warum das so war. 🤡

    Es ist eben "objektorientiert". :p

    TdZ schrieb:

    ich würde mal gerne wissen, warum man RTTI nicht benutzen soll. Überall lese ich nur, dass es nicht gut wäre, aber keiner erklärt, wieso genau.

    Ist RTTI etwa sowas wie die dunkle Seite der Macht in C++ ?

    Hm, nein. Die dunkle Seite der Macht wird von einem Grossteil durch Zeiger und böse Casts beherrscht. Präprozessor-Metaprogrammierung gewinnt jedoch zunehmend an Einfluss. 😃

    RTTI ist ja nicht nur typeid . Das ganze System mit dynamischen Typen geht darunter, zum Beispiel Exceptions oder dynamic_cast . Viele Programme würden ohne RTTI also gar nicht funktionieren. Trotzdem soll das nicht heissen, man sollte unbedacht mit typeid und dynamic_cast hantieren (wie üblich). Mit virtuellen Funktionen kommt man in der Polymorphie meistens schon sehr weit.



  • Kommen wir mal zur Sache.
    Ich kenne Fälle, wo catch(Exception& e){cout<<typeid(e).name()<<": "<<e.why() oder sowas steht.
    Ich kenne Fälle, wo string getClassName() per RTTI gelöst wird, um komplexe Datenverflechtungen zu speichern und zu laden. Eine virtual string getClassName()=0 in der Basisklasse nebst in jeder geerbten einer wäre nicht schrecklich schlimm, wenn wir mal das Gedankenexperiment anstellen würden, ohne RTTI auskommen zu wollen.

    nur mag ich mich gerade nicht an andere fälle erinnern. kennst du wichtige oder häufige fälle anderer art? oder kennst du einen programmiertheoretischen grund, weshalb RTTI nötig wäre?



  • Wer meint, Singletons sind ein Ersatz für globale Variablen, der hat Singletons nicht kapiert.

    -*_

    dynamic_casts sind auf 64 bit MS Systemen extrem lahm.



  • Codetier schrieb:

    Wer meint, Singletons sind ein Ersatz für globale Variablen, der hat Singletons nicht kapiert.

    Blablabla



  • Dein Niveau ist immer wieder beeindruckend.



  • Natürlich, was hast du denn erwartet?



  • Etwas mehr als Blablabla



  • Als Antwort auf den Unfug den du da losgelassen hast?
    I don't think so.



  • Du meinst also wirklich, dass Singletons als Ersatz für globale Variablen gedacht sind?



  • Codetier schrieb:

    dynamic_casts sind auf 64 bit MS Systemen extrem lahm.

    In Visual C++ vielleicht.



  • Vielleicht war's so gemeint:
    Singletons SIND globale Variablen. Wenn man das weiß, war der Spruch "Wer meint, Singletons sind ein Ersatz für globale Variablen, der hat Singletons nicht kapiert." in der Tat nicht so prickelnd.



  • Genau dieser Gedanke führt dazu das Singleton immer als "besserer" Ersatz für globale Variablen gesehen werden. Der Name sagt doch schon für was sie da sind. Für alles wovon es nur eines geben darf.



  • TdZ schrieb:

    Ist RTTI etwa sowas wie die dunkle Seite der Macht in C++ ?

    Das ist meist historisch bedingt, da alte C++ Compiler mit RTTI so ihre Probleme hatten. Aktuell sollte man RTTI immer verwenden, es hat keinen Sinn darauf zu verzichten.



  • volkard schrieb:

    kennst du wichtige oder häufige fälle anderer art? oder kennst du einen programmiertheoretischen grund, weshalb RTTI nötig wäre?

    Wenn Du x von einer Basisklasse abgeleiteten Objekte in einem Container halten willst, z.B. in einem Grafikprogramm Rectangle, Circle, Line, Point, deren Oberklasse Drawable ist. Manche C++ Programmierer würden dazu schlechtes Design sagen. Aber es ist aber ein kohärentes Design.



  • C++Fan 2009 schrieb:

    volkard schrieb:

    kennst du wichtige oder häufige fälle anderer art? oder kennst du einen programmiertheoretischen grund, weshalb RTTI nötig wäre?

    Wenn Du x von einer Basisklasse abgeleiteten Objekte in einem Container halten willst, z.B. in einem Grafikprogramm Rectangle, Circle, Line, Point, deren Oberklasse Drawable ist. Manche C++ Programmierer würden dazu schlechtes Design sagen. Aber es ist aber ein kohärentes Design.

    aber dann mache ich doch zeichenDing->draw() und draw ist virtual. du müßtest konkreter werden.



  • Codetier schrieb:

    Genau dieser Gedanke führt dazu das Singleton immer als "besserer" Ersatz für globale Variablen gesehen werden. Der Name sagt doch schon für was sie da sind. Für alles wovon es nur eines geben darf.

    ist heute der tag der allgemeinplätze?


Anmelden zum Antworten