Ich habe ein Array von Zeigern auf eine Basisklasse, so dass ich diese Zeiger auf (verschiedene) Unterklassen der Basisklasse verweisen lassen kann, aber dennoch mit ihnen interagiere. (wirklich nur ein paar Methoden, die ich virtuell und überladen gemacht) Ich frage mich, wenn ich die Zeiger zu vermeiden, und stattdessen nur ein Array der Basisklasse zu machen, aber haben eine Möglichkeit, die Klasse auf die Unterklasse meiner Wahl festgelegt. Ich weiß, es muss sein etwas Dort wird die Klasse angegeben, da sie verwendet werden muss, um den Funktionszeiger für virtuelle Methoden nachzuschlagen. Übrigens, die Unterklassen haben alle die gleichen Ivar und das gleiche Layout.
Hinweis: Das Design basiert auf der Verwendung eines Template-Arguments anstelle einer Variablen, um die Leistung zu steigern. Die abstrakte Basisklasse ist also nur die Schnittstelle für die Unterklassen, die bis auf den kompilierten Code alle gleich sind.
Danke
EDIT: ALLE UNTERKLASSEN (und ggf. die GRUNDKLASSE) HABEN GLEICHES LAYOUT/GRÖSSE
Davon abgesehen wäre das Strategiemuster gut, aber es fügt der Klasse einen Zeiger hinzu, während ich genau eine Abweichung vermeiden möchte.
Einfacher ausgedrückt, versuche ich Folgendes zu tun
class base {
int ivars[100];
public:
virtual char method() = 0;
}
template <char c>
class subclass : base {
public:
char method() {
return c;
}
}
base things[10];
some_special_cast_thingy(things[2], subclass);
printf("%c", things[2].method());
natürlich ist es viel komplexer, aber soweit die Klassen / was auch immer gehen, dass so ziemlich alles, was ich bin auf der Suche nach. Dies ist wahrscheinlich eine Sprache Funktion, btw.