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
    whatever

    nee, 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


Anmelden zum Antworten