polymorphismus und objektidentität
-
super! vielen dank, das ist genau das, was ich gesucht habe!!
-
schau dir mal dynamic_cast und typeid an.
Das benutzt aber RTI, und ist bekanntlich lahm
Fuer die meisten Anwendungen aber ok.
Wenn es dir auf Geschwindigkeit ankommt nutze die compiler typ infos ... Schau dir das "Besucher Muster" (visitor - design pattern) an.
Ciao ...
-
Lahm -- im Vergleich wozu? Dass das lahmer ist als wenn man dieselbe Funktionalität von Hand implementiert bezweifle ich.
-
Naja, das ist sicher auch Compilerabhaengig ...
Aber der VC 6.0 Compiler ist langsamer mit RTI, als wennst ne simple (virtuelle) Methode nimmst. vielleicht probierts mal wer mit dem gcc aus ...
Lahm isses aber trotzdem, aber nur vom Design her
Und noch viel doofer ... bei Standard-projekten ist Bei M$ das RTI abgeschalten.Ciao ...
-
So langsam kann das doch nicht sein. Wie schwer soll denn RTTI zu implementieren sein? Einfach einen Eintrag in der VTable für einen Zeiger auf die typeinfo-Struktur reservieren und fertig? Macht eine doppelte Indirektion.
Die gleiche Indirektion wie beim Aufruf einer virtuellen Funktion ...
-
RHBaum schrieb:
Naja, das ist sicher auch Compilerabhaengig ...
Aber der VC 6.0 Compiler ist langsamer mit RTI, als wennst ne simple (virtuelle) Methode nimmst. vielleicht probierts mal wer mit dem gcc aus ...
Lahm isses aber trotzdem, aber nur vom Design her
Und noch viel doofer ... bei Standard-projekten ist Bei M$ das RTI abgeschalten.Ciao ...
Der VC6.0 kam 98 raus, wir haben das Jahr 2004 und seitdem hat sich einiges getan,
als Referenz sollte man den VC7.1 verwenden, wenn man nen MS Compiler nehmen will.
-
Frag mich ned was Microsoft da macht ....
Es ist aber definitiv langsamer ! Weiss ned wie die das Object aufloesen ... vielleicht uebern langes symbol oder so ... waehrend mit ner virtuellen methode kannst dich auf nen int beschraenken ... mehr unterschiedliche klassen wirst ja ned haben ....vielleicht macht schon das was aus ...
Und wer weiss was M$ noch alles dranhaengt ... Schau mal die RUNTIME_CLASS Geschichte aus der MFC an .. wenn das geroedel alles dann noch mit an der RTI dranhaengt, wunder ich mich ned :p
Ciao ....
-
doppelpost ....
-
RHBaum schrieb:
Aber der VC 6.0 Compiler ist langsamer mit RTI
RTTI nicht RTI.
Und noch viel doofer ... bei Standard-projekten ist Bei M$ das RTI abgeschalten
Und deshalb wirfst du sinnlos mit dem Visitor-Pattern um dich? Da würde ich doch eher mal in den Project-Settings die /GR-Option anschalten. Das ist nicht nur viel einfacher und effizienter sondern ermöglicht dir sogar später mal auf das Acyclische-Visitor-Pattern umzusteigen.
Und btw: Bist du sicher, dass du die Nachteile von Visitor verstanden hast?
So langsam kann das doch nicht sein.
Ist es auch nicht. Allerdings sind die Kosten eines dynamic_cast in der Regel (zumindest bei vielen Compilerimplementationen) nicht konstant sondern abhängig von der Hierarchie-Tiefe. Du kannst zwar immer mit einer Indirektion das RTTI-Objekt holen (wenn es z.B. in der Vtable abgelegt ist), aber damit ist die Arbeit ja noch nicht erledigt.
Aber der VC 6.0 Compiler ist langsamer mit RTI, als wennst ne simple (virtuelle) Methode nimmst
Das ist richtig. Nur was hilft dir das in einer Situation wo du keine virtuelle Methode hast?
-
Also ich finde RTTI schon lahm und ich kann mir selbst was basteln, was in vielen Situationen ausreicht und schneller arbeitet.
-
RTTI nicht RTI.
In dem Performance-Fall meinte ich aber RTI, also nen simples dynamic_cast .... und auch nur ueber eine Hirarchiebene.
Und deshalb wirfst du sinnlos mit dem Visitor-Pattern um dich?
Obs sinnlos ist weiss ich ned, zumindest kann man damit das dynamic_cast von objecten umgehen. Und nix ist perfekt, gibt ja ned nur eine impl vom Besuchermuster. Aber bei dem Teil hast Recht, ist der Aufwand und der Nachteil zu gross, gegenueber dem "Gewinn" den man bekommt.
Wobei mir jemand mal gesagt hat, wenn man uebermaessig dynamic casts verwendet, sollte man sein design noch mal ueberdenken ...Der VC6.0 kam 98 raus, wir haben das Jahr 2004 und seitdem hat sich einiges getan,
Ja, deswegen waers intressant mal zu hoeren wie es da ist ... ?
Waer vielleicht auch nen Grund um mal umzusteigen ... Bei uns ist VC 6.0 eben noch Standard ....Ciao ...
-
RHBaum schrieb:
RTTI nicht RTI.
In dem Performance-Fall meinte ich aber RTI, also nen simples dynamic_cast .... und auch nur ueber eine Hirarchiebene.
Welches der beiden T's von Run-Time Type Information fällt denn da weg?
-
Ich nehm toor 3 ...
Nee hab ich verhauen .. ich meinte RTTI .... hab das verwechselt
Asche auf mein haupt ...Ciao ...