(C++) RTTI?



  • Hi Leute

    Ich baue mir ein VFS für unsere Engine zusammen, und dazu bin ich am überlegen, ob ich die Typenkontrolle mit RTTI oder als Enum einbauen soll. Es geht vorallem um die Performance, denn min. 6000 Checks / Sek werden es auf jeden Fall sein.

    Meine überlegen möglichkeiten:

    Entweder die Nodes enumerieren:
    enum Type {
    PARTICLE_SYSTEM = 1,
    TEXTURE,
    MESH,
    ...
    };

    class Node {
    public:
    Type _type;
    ...
    }

    und dann in die Node einbauen, um den Typencheck zu erledigen.

    Oder das ganze per RTTI

    if( dynamic_cast<ParticleSystem*>(node) ) {
    ...
    } else if( dynamic_cast< Texture*>(node) ) {
    ...
    }

    usw.

    Wie sehen euere Erfahrungen aus bei RTTI? Ich meine vom Speed.
    Es geht um ein Game, und da zählt jedes Frame

    Danke
    Sven



  • Macht RTTI nicht Stringvergleiche? Das dürfte doch schon alles sagen.



  • Die RTTI braucht ja keine Strings zu vergleichen. Es reicht ja ein Klassenvergleich. Allerdings baue ich die Enum Variante ein, da alles andere Overkill währe.



  • warum ist rtti so wichtig für dich? wie willst du das denn sinnvoll einsetzen?



  • Ist von dem her nicht wichtig. Es war nur ein weiterer Ansatz, den NodeType zu representieren.



  • Also mein C++ Buch sagt mir, dass man RTII wenn möglich vermeiden sollte, und eine Verwendung von RTII meist auf einen Designfehler schließen lässt.
    Vielleicht kannst du dein Problem m.h. von Klassen und virtuellen Funktionen besser lösen ?
    Auf jeden Fall verschieb ich dich mal ins C++ Forum, die kennen sich mit sowas besser aus


Anmelden zum Antworten