Eine polymorphe Sammlung von kurioserweise wiederkehrenden Vorlagenmustern (CRTP) in C ++?
Ich habe eine KlasseBase
von denen ich zwei Klassen habe,DerivedA
undDerivedB
Wie unten definiert.
template <typename Derived>
class Base{
public:
double interface(){
static_cast<Derived*>(this)->implementation();
}
};
class Derived,A : public Base<DerivedA>{
public:
double implementation(){ return 2.0;}
};
class DerivedB : public Base<DerivedB>{
public:
double implementation(){ return 1.0;}
};
Kurz gesagt, ich versuche Folgendes, um eine Sammlung von Objekten zu verwalten, von denen einige sindDerivedA
und einige davon sindDerivedB
:
std::vector<std::shared_ptr<Derived>>
Was natürlich unmöglich ist, weil ich jetzt die Klasse gemacht habeDerived
eine Klasse mit Vorlagen.
Kann ich auf irgendeine Weise eine polymorphe Sammlung von Objekten erstellen / verwalten?
EDIT: Leider funktioniert eine einfache Template-Struktur nicht als Funktionimplementation
wird in meinem eigentlichen Programm vorgehalten - also dannimplementation
müsste eine templierte rein virtuelle funktion sein, die nicht sein kann. Entschuldigen Sie meinen Mangel an Erklärung.