C ++: Verwendung von typeid im Produktionscode

8

Wird es allgemein als schlechte Praxis angesehen, typeid im Produktionscode zu verwenden? Außerdem habe ich festgestellt, dass typeid retains type_info zurückgibt, was einige Metadaten enthält (z. B. eine Zeichenfolge mit dem Namen des Typs). Gibt es eine Möglichkeit, dies zu deaktivieren?

    
Paul Manta 15.06.2011, 23:06
quelle

2 Antworten

8

Es ist schwer zu sagen, ob die Verwendung eines bestimmten Sprachfeatures "schlecht" oder "gut" ist. Es hängt wirklich davon ab, wie Sie es verwenden. Es ist nichts an sich falsch, typeid zu verwenden, wenn es das richtige Werkzeug für den Job ist. Wenn es jedoch eine bessere Lösung für jedes Problem gibt, das Sie lösen, sollten Sie typeid zugunsten dieser besseren Lösung vermeiden.

Es ist oft keine gute Idee, typeid zu verwenden, da seine Verwendung oft durch Vererbung und virtuelle Funktionen vermieden werden kann. Wenn Sie Ihr System auf diese Weise aktualisieren können, ist dies eine gute Idee.

Ob Sie typeid vermeiden können, indem Sie std::type_info zurückgeben, dies sollte keine Leistungsprobleme verursachen. typeid wird als const std::type_info& ausgewertet, so dass keine der enthaltenen String-Informationen tief kopiert werden. Bei den meisten Implementierungen ist das tatsächliche std::type_info -Objekt in der virtuellen Funktionstabelle des Objekts gespeichert, so dass intern nicht kopiert wird.

    
templatetypedef 15.06.2011, 23:09
quelle
11
  1. Hängt davon ab, was Sie mit der Typid machen. Wenn Sie Polymorphie verwenden, ist das natürlich schlecht. Es ist jedoch in Ordnung, solche Traces oder solche Dinge auszugeben, die auf den Maschinen der Kunden debuggen.
  2. Die einzige Möglichkeit besteht darin, RTTI in Ihrem Compiler zu deaktivieren. Es gibt keinen Standard dafür. Beachten Sie, dass dies dynamic_cast ebenfalls deaktiviert.
Billy ONeal 15.06.2011 23:10
quelle

Tags und Links