Templateparameter und virtual call / RT-Identifizierung
-
Also folgendes will ich tun:
struct Widget { template<class tArc_> // Geht nicht, is klar virtual void Serialise(tArc_ t_) {} }; struct Button : public Widget { virtual void Serialise() { Serialiser<tArc_>(*this); // tArc_ woher ??? } }; // Client Widget* w = new Button(); w->Serialise(); w->Serialise(cout);Also entweder,
wie kann ich einem virtuellen call einen Templateparameter "mitgeben"?
(Bzw. wie könnte man das Verhalten "Simulieren")
Oder,
wie könnte ich Widget* zur RT ohne vt identifizieren?Gibt es da irgendwelche "moderne" Lösungen?
(Ohne irgendwelche Hardcore-C-Hacks, das bekomm' ich auch noch hin
)c ya, cPanther
-
Du willst der Methode 'serialize' einen Parameter mitgeben, wohin er die Daten ausgeben soll? Dazu brauchst du doch keinen Template-Parameter.
Du könntest entweder eine eigene Interface-Klasse dafür anbieten oder aber z.B. generell als Parameter 'ostream&' angeben, d.h. du kannst damit wahlweise z.B. cout, ofstream oder ostringstream übergeben.
-
Boost::Archive
ostream
whatevernee, will's schon so wie geschrieben haben

(Ist ja auch eher Beispielcode, also was ich vorhabe is ein bissle anders
)Aber trotzdem danke ;o)
-
template<class tArc_> struct Widget { virtual void Serialise(tArc_ t_) {} }; struct Button : public Widget<Button> { virtual void Serialise() { Serialiser<Button>(*this); } }; // Client Widget<Button>* w = new Button(); w->Serialise();Ist jetzt ungetestet ausm Stegreif. Ist das ungefähr das, was du willst? Oder habe ich deine Frage nicht richtig verstanden?
Dennis