queue für template instancen
-
Hallo zusammen,
ich habe mal ne Frage. Ich habe ne ganze Menge Timer-Klassen, welche alle von einem Timer-Template-Typ abgeleitet sind. Bisher habe ich für jeden Sub-Typ eine Eigene Queue angelegt. Die Timer unterscheide ich über eine Referenz, welche ich als Schlüssel für die Queue nutze. Nun sind es aber immer nur ein oder zwei Timer pro Typ, welche gleichzeitig aktiv sind. Daher hab ich überlegt, ob man die Timer nicht alle in die selbe Queue speichern kann, und diese quasi auf den generischen Basistyp typisiert. Ich bekomme es aber nicht hin. Geht es, oder muß ich bei meinen zig Queues bleiben?
Die Queue ist definiert wie folgt:
template <typename KEY, typename TIMER=ReferenceTimer<KEY> > class ReferenceTimerQueue : public PairQueue<KEY, TIMER>{}Bisher habe ich die Queue immer wie folgt angelegt:
ReferenceTimerQueue<VirtualLogicalTime, TimerA * > timerAQueue; ReferenceTimerQueue<VirtualLogicalTime, TimerB * > timerBQueue; ... [/cpp] Nun würde ich gerne dies zusammenfassen zu: [code="cpp"] ReferenceTimerQueue<VirtualLogicalTime, ReferenceTimer * > timerQueue;Da sagt er aber immer: error: template argument 2 is invalid
Geht es doch irgendwie???

Vielen Dank schonmal.
-
Da sagt er aber immer: error: template argument 2 is invalid
Nun, dann ist die offensichtliche Erklaerung, dass
ReferenceTimerkein (zum Deklarations-Zeitpunkt) bekannter Typ ist.ReferenceTimerdarf auch nicht (wie der Name im Uebrigen impliziert) ein Referenztyp sein, weil es in C++ natuerlich keine Zeiger auf Referenzen gibt. Also: Wie istReferenceTimerdefiniert?
-
Stimmt, hab ich vergessen anzugeben:
template <typename T> class ReferenceTimer : public Timer { public: ReferenceTimer(Service & aService); ReferenceTimer(const ReferenceTimer<T>& orig); virtual ~ReferenceTimer(); [...] virtual void setReference(const T & ref); T getReference(); };also so im wesentlichen. Klar, ReferencTimer ist nen Template. Ich dachte, man kann dieses als quasi Interface verwenden. Also der zu speichernde Timer muß vom Typ ReferenceTimer sein (da dieser alles hat, was ich brauche).
-
ReferenzTimer heißt das ding auch nur, weil es eine Reference auf ein Ereignis speichert. Somit also der Zeiger ein bestimmtes Ereignis referenziert.
-
Also der zu speichernde Timer muß vom Typ ReferenceTimer sein (da dieser alles hat, was ich brauche).
ReferenceTimerist kein Typ. Sondern ein Klassentemplate. Du must schon Template-Argumente angeben
Vielleicht willst du eine Basisklasse erstellen, die schon alles hat was du brauchst, und von der
ReferenceTimerableitet? Was ist den mitTimer?Oder vielleicht willst du einfach ein Template als Template-Parameter? Ohne Zeiger? Also so in der Richtung:
template <typename KEY, template<typename T> class TimerTempl > class ReferenceTimerQueue : public PairQueue<KEY, TimerTempl</* hier kommen die Argumente rein */> >{}