alternative für RTTI
-
KasF schrieb:
Es würde reichen, wenn du nur eine getFunktion in der Basisklasse definieren würdest.
Basis: virtual element* getTyp() = 0; Button: virtual button* getTyp() { return this; } Window: virtual window* getTyp() { return this; }
Nennt sich CoVariant-Returntype ...
fein. und geht dann auch
g->getTyp(4711)->getTyp(1234)->funktionDieNurButtonHat("hallo");
?
woher weiß der compiler, daß es dort erlaubt ist, funktionDieNurButtonHat aufzurufen? oder läßt er prophylaktisch einfach mal alle funktionen zu, die in irgendeiner geerbten klasse liegen?
-
fragezeichen? schrieb:
premature optimization schrieb:
Und das mit den IDs ist Quatsch wie du doch schon selber merkst. Ob du dir eine ID oder nen Pointer als Member einer Klasse hältst ist doch egal.
wenn man die ids eh als member speichert, macht das wenig sinn, da hast du recht.
wenn man aber statische ids vergibt, und in der lage ist sich diese 2min zu
merken, kann man in einer anderen methode oder funktion (die keinen zugriff
auf die verwaltungsklasse hat) den zeiger weiterverwenden.und wie volkard schon sagte, wenn man übers netz auf objekte zugreifen will,
werden zeiger sicherlich probleme machen. man kann die gültigkeit nicht
prüfen und das auf jedem client die daten an der selben stelle liegen, ist
sehr unwahrscheinlicht.Klingt für mich nach nem extrem kaotischen Design. Warum must du den so verteilt auf deine GUI zugreifen? Schon mal was von Observer-Pattern, MVC usw. gehört? Und warum willst du bitte übers Netz direkt auf die GUI zugreifen?
-
premature optimization schrieb:
Und warum willst du bitte übers Netz direkt auf die GUI zugreifen?
will ich nicht, es geht nur darum dass man das mit einem ID system könnte.
das system ist garnicht caotisch. kein cast, exeption bei fehlgriff und
kein dynamic_cast overhead. und wer die implementierung nicht kennt sieht
auch nix caotisches.
-
Die Architektur deiner Software ist schlecht, wenn du von so vielen verschiedenen Stellen auf die GUI zugreifst, das hat nix mit dynamic_cast und exceptions zu tun. Aber ich gebs jetzt auf, wenn du unnötig komplizierte Sachen mit IDs usw. machen willst, dann mach.
-
das ist nicht unnötig kompliziert.
ich habe eine zentrale instanz von der gui und will davon auf alle elemente
zugreifen.was würdest du den für diese situation vorschlagen?
ich will nicht für jeden knopf den ich erzeuge ein zeiger speichern.
-
fragezeichen? schrieb:
ich will nicht für jeden knopf den ich erzeuge ein zeiger speichern.
Schau dir einfach an wie es bestehende Systeme machen.
-
volkard schrieb:
g->getTyp(4711)->getTyp(1234)->funktionDieNurButtonHat("hallo");
?
woher weiß der compiler, daß es dort erlaubt ist, funktionDieNurButtonHat aufzurufen? oder läßt er prophylaktisch einfach mal alle funktionen zu, die in irgendeiner geerbten klasse liegen?Ok, kommt davon, wenn man den Thread nur überfliegt.
volkard schrieb:
fein
Es wäre erwünschenswert, wenn du dir mal ne andere Haltung im Forum angewöhnen könntest. 90% deiner Beiträge klingen so, als ob ganz TOLL wärst und über uns allen stehen würdest.Nur ne Bitte ...
-
ich finde deinen code aber wirklich fein. deswegen schrieb ich "fein". nur löste er in diesem fall keine wchtigen probleme.