Ich bin auf einem Mikrocontroller (was bedeutet, dass ich nur statische Speicherzuweisung haben kann) und ich versuche, mit Vererbung zu arbeiten .....Static Polymorphismus Ausgabe
Angenommen, ich habe eine abstrakte Klasse Image
und eine abstrakte Klasse Font
. Eine Instanz Font
kann ein Image
aus den in einer Funktion wie so gegeben char
Basis zurückgeben:
Font* mf;
Image* image = mf->GetImage("a");
nun das eigentliche Problem ist, ich habe keine Ahnung, was für die GetImage
Funktion zu tun.
Das Problem ist das: in C++ für Sie ein Mitglied einer abstrakten Klasse müssen Sie es als Zeiger verwenden. Also mein Dilemma ist, dass ich eine Font
habe, die eine neue Image
erstellen und dann zurückgeben will.
Wenn es einen Zeiger auf seine zurück neu erstellten Image
Sie einen Verweis auf ein temporäres Objekt Rückkehr:
Image* FontImpl::GetImage(char c){
return &ImageImpl(c); //This object is destroyed once this function exits
}
Und dann, wenn ich kehre ich versuchen, einen tatsächlichen Typ wie folgt zurück:
Image FontImpl::GetImage(char c){
return ImageImpl(c); //Cannot cast from ImageImpl to Image
}
Also gibt es ein Idiom oder etwas für diese Art von statischem Speicherproblem?
Was eigentlich _static inheritance_ ist? Meintest du _static polymorphism_ wie mit [CRTP] (https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern) zur Verfügung gestellt? –
@ πάνταῥεῖ Ja ich meinte statischen Polymorphismus .... Ich werde den Beitrag entsprechend bearbeiten – DarthRubik
Mit abstrakten Basisklassen ist Laufzeit Polymorphie nicht statische Polymorphie. Sie machen statische Speicherzuweisung. Wenn dies jedoch unhandlich wird, möchten Sie vielleicht das Schreiben oder Herunterladen einer kleinen Speicherpoolklasse untersuchen, also nehmen Sie selbst eine dynamische Zuweisung aus einem statischen Puffer vor. –