vererbung bei template parameter



  • hallo zusammen,

    ich habe folgendes template:

    template <typename T, typename S=ReferenceTimer<T> >
            class ReferenceTimerQueue : public PairQueue<T, S *> {
            public:
                void add(S * timer);          
            };
    
            template <typename T, typename S >
            void ReferenceTimerQueue<T, S>::add(S * timer){
    
                T ref = timer->getReference();
                PairQueue<T, S *>::add(ref, timer);
    
           }
    

    Wie bekomme ich es hin, dass das Template auch mit Unterklassen von S=ReferenceTimer<T> arbeitet? Im Moment bekomme ich da immer Fehler. Oder übersehe ich da wieder was triviales?


  • Mod



  • ok ok, bereichtigte kritik 😉

    also meine frage ist, wie kann ich das dargestellte template auch mit subklassen von S verwenden?

    ich habe:

    template <typename T, typename S=ReferenceTimer<T> >
            class ReferenceTimerQueue : public PairQueue<T, S *> {
            public:
                void add(S * timer);          
            };
    

    ich möchte:

    template <typename T, typename S=IsAReferenceTimer<T> >
            class ReferenceTimerQueue : public PairQueue<T, S *> {
    

    Geht dies?

    gruß


  • Mod

    Ich bin geneigt zu antworten: probier es aus.
    Ich verstehe die Frage nicht.
    Was ist hier mit "verwenden" gemeint?



  • sven_ schrieb:

    Im Moment bekomme ich da immer Fehler.

    🙄

    Zeig ein Minimalbeispiel, das den Fehler reproduziert.



  • sven_ schrieb:

    ok ok, bereichtigte kritik 😉

    also meine frage ist, wie kann ich das dargestellte template auch mit subklassen von S verwenden?

    template <typename T, typename S=ReferenceTimer<T> >
            class ReferenceTimerQueue : public PairQueue<T, S *> {
            public:
                void add(S * timer);          
            };
    

    Solange die Sub-Klassen alle Bedingungen erfüllen musst du gar nichts weiter tun.
    Soweit ich dich verstehe willst du nur folgendes sicherstellen:

    template <typename T, typename S>
            class ReferenceTimerQueue : public PairQueue<T, S *> 
            {
            BOOST_STATIC_ASSERT(boost::is_base_of<ReferenceTimer, S>::value)
            public:
                void add(S * timer);          
            };
    


  • hallo jungs,

    vielen dank für die hilfe. war doch stark verwirrt, nun tut es aber. 🙂


Anmelden zum Antworten