Betrachten wir Reihe von abgeleiteten Klassen zum Beispiel haben, wie nachstehend aufgeführt:Vererbung und Member-Funktionen
class A
{
...
}
class B1 : public A //there may be many B's here say, B2, B3 etc
{
...
}
class C1 : public B1 //may be more C's as well
{
...
}
Ich mag würde alle Objekte in einzelnen Behältern setzen, damit alle A
der Typklasse sein würde.
Angenommen, ich möchte eine Klasse C1
hinzufügen, was wäre der beste Weg, dies zu erreichen? Meine Optionen wären, es in der Basisklasse A
einzuführen und die benötigte Implementierung in C1
zu schreiben, oder ich könnte es in C1
einführen und dynamisches Casting machen, um darauf zuzugreifen. Welches ist bevorzugt? Ist dynamisches Gießen zu teuer? (Meine Hauptbedingung ist die Laufzeit.Ich habe ein Flag in der Basisklasse, um anzugeben, um welche Art von abgeleitetem Objekt es sich handelt, daher muss ich nicht jedes Objekt im Container dynamisch transformieren. Das Hinzufügen unnötiger Funktionen zur Basisklasse kann dazu führen ? in schlechter Befehls-Cache-Verwendung)
Niemand kann Ihnen sagen, ob dynamisches Gießen "zu teuer" ist, denn was Sie sich leisten können, ist subjektiv. Da es so zu sein scheint ("Meine Hauptbedingung ist die Laufzeit"), würde ich empfehlen, beides zu tun und die Ergebnisse zu vergleichen, um zu sehen, ob es für Ihre speziellen Hardware- und Compiler-Optimierungen und Anwendungsfälle zu teuer ist externe Restriktionen und ... – Altainia
Eine Schnittstelle zu breit zu machen ist schlechtes Design und so ist Downcasting, Sie könnten eine zusätzliche Sammlung mit Zeigern zu spezifischeren Schnittstellen halten. – imreal
Sie könnten eine 'Variante' mit einem Besuchermuster verwenden. – AndyG