Löse folgende Gleichung: RTTI=evil



  • 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?



  • volkard schrieb:

    oder kennst du einen programmiertheoretischen grund, weshalb RTTI nötig wäre?

    Reflection wäre da an erster Stelle zu schreiben. In C++ muß man ohnehin viel machen, damit Reflection umgesetzt werden kann, aber ohne RTTI ist es ein Krampf.



  • Braucht man Reflection wirklich oft in C++? Wäre es hierfür nicht meist geeigneter, gleich eine dynamischere Sprache zu nehmen?

    @ volkard: Mir fällt sonst auch nicht gleich ein wichtiger Fall ein, aber gerade Exceptions kommen wohl in fast allen C++-Programmen vor...



  • Nexus schrieb:

    aber gerade Exceptions kommen wohl in fast allen C++-Programmen vor...

    ähm, ja. um exceptions zu haben, darf ich im compiler RTTI nicht abschalten. aber ich als programmierer fasse keine RTTI-sachen an.

    und reflection paßt nicht zu c++. hat eh nur den sinn, daß der xml-reader das spielstand-laden um den faktor 100 verlangsamt, und ich mir schon wieder einen fetteren prozessor kaufen muß. 🕶



  • Nexus schrieb:

    Braucht man Reflection wirklich oft in C++?

    Nein, denn es ist ja nicht vorhanden 😉

    Mit Reflection kann man schon ein bißchen mehr machen, als nur die XML-Serialisierung zu vereinfachen 😉



  • audacia schrieb:

    Mit Reflection kann man schon ein bißchen mehr machen, als nur die XML-Serialisierung zu vereinfachen 😉

    klar, man kann mir reflection auch den weihnachtsbaumsimulator dynamischer und bunter machen. du sagst leider nicht aus, ob man damit auch was sinnvolles machen kann und legst kein prüfbares beispiel dazu.



  • einfacher Pluginsysteme schreiben.



  • volkard schrieb:

    du sagst leider nicht aus, ob man damit auch was sinnvolles machen kann und legst kein prüfbares beispiel dazu.

    Ist das dein Ernst?
    Auf Anhieb fallen mir ORM (ECO, Hibernate), RPC (.NET WCF, Nexus Remoting), AOP (Spring, AspectJ) und dynamisches Dispatching (IDispatch, Skriptspracheneinbindung) ein. Aber ich bin sicher, das hättest du auch selbst herausfinden können 🙄



  • Nach ca 20.000 Offtopic-Diskussionen und 2-3 themenbezogenen Beiträgen erlaube ich mir, zu schlussfolgern:

    RTTI darf heutzutage bedenkenlos genutzt werden, insofern man es mit Bedacht einsetzt.

    Ist dem noch etwas hinzuzufügen, oder darf man das so stehen lassen?

    Wie sieht's mit GCC aus, hat der da irgendwelche Probleme, oder gilt obige Aussage wirklich für alle modernen Compiler?



  • RTTI darf heutzutage bedenkenlos genutzt werden, insofern man es mit Bedacht einsetzt.

    Bedenkenlos <=> mit Bedacht ... Dieser Satz ist ein Widerspruch. 🙂



  • Das Problem an rtti ist kein technisches. Wenn der Compiler damit Probleme hat, dann sollte der Compiler gefixt werden. Das Problem ist einfach ein Strukturelles. Häufig deutet die Verwendung von rtti auf ein schlechtes Design hin.

    Wenn ich im Programm eine Referenz oder einen Zeiger auf eine Basisklasse habe, aber Zugriff auf die abgeleitete Klasse benötige, kann ich das über einen dynamic_cast lösen. Allerdings sollte man sich zunächst fragen, warum ich da nur die Basisklasse habe und das Design überdenken.

    Und noch was: ich glaube kaum, dass rtti bei dem MS-Compiler extrem langsam ist. Mag sein, dass er langsam ist, aber extrem? Warum werden diese Steigerungsformen so (extrem 😃 ) häufig verwendet. Im übrigen ist dynamic_cast ist vom Prinzip her langsamer als ein static_cast. Er muss ja auch mehr tun.



  • knivil schrieb:

    RTTI darf heutzutage bedenkenlos genutzt werden, insofern man es mit Bedacht einsetzt.

    Bedenkenlos <=> mit Bedacht ... Dieser Satz ist ein Widerspruch. 🙂

    Er ist auch insofern sinnlos, als dass er einen Programmierer dazu anhält beim programmieren zu denken, was meiner Meinung nach selbstverständlich sein sollte. Man darf grundsätzlich alles benutzen, was es gibt, allerdings sollte die Entscheidung nicht aus Unwissenheit (obwohl man dafür nicht unbedingt etwas kann) oder noch schlimmer Faulheit treffen, sondern aus einem klarem Grund, welchen man mit den Alternative abgewägt hat und zum Schluss gekommen ist, dass das die geeignetste Lösung ist.



  • Jaja, stimmt... Ich interpretiere das jetzt einfach mal als JA.

    Danke!


Anmelden zum Antworten