Frage zur Umsetzung eines Templates...
-
Habe eine Baumstruktur, und will diese als Template gestalten, so das eine beliebiger Typ als Knoten erzeugt und in den Baum integriert werden kann
Grobstruktur des Baumklasse:
//Baumstruktur
class CAllocation{ //Knoten class CAllocNode{ add(..); insert(..); delete(...); }; CAllocation(){ //Erzeugung der Wurzel als CAllocNode } CAllocNode* Root(){...}; };wie mach ich das , das nun die Knoten eine bestimmten Typ represenieren?
Später soll das ganze so Funktionieren
CAllocation<TYP> Baum; Baum.Root()->add(TYP);Baum
-
Schau dir mal boost::any an.
-
das wäre ne alternative, aber wenn ich das mit templates machen will?
-
Alle Member, auch Unterklassen eines KLassentemplates, sind automatisch auch Templates. Also:
template <typename T> class CAllocation { public: class CAllocNode { private: T value; public: void insert(T); // etc. }; };Allerdings stellt sich mir die Frage, wieso du Methoden wie insert() und add() in die node-Klasse packen willst. Ich würde die Node-Klasse eher nur intern verwenden um die Implementierung umzusetzen und insert() & co als methoden von CAllocation implementieren, so dass der Klient sich nur mit CAllocation rumärgern muss
(Sonst kommen im Klientcode so Konstrukte wie CAllocation<int>::CAllocNode gehäuft vor)Sie dir evtl. auch mal die STL-Container deines Compilers an.
btw: bei deinem Beispiel oben muesste es
Baum->Root.add()heißen (Zugriffsoperatoren genau andersrum)
-
hola
soll 'Root()' ein neues AllocNode-object zurueckgeben ?
template<class T> class Allocation { public: template<class V> class AllocNode { public: add(const V&) { } }; ... AllocNode<T>* Root(void) { ... } };Meep Meep
-
vergiss mal was ich oben geschrieben habe. hatte mein hirn noch nicht eingeschalten.
was genau probierst du zu machen ?
Meep Meep
-
@meep meep: beim erzeuegen con CAllocation, wird automatisch eine wurztel mit dem Inhalt von T erzeugt.. root. gibts nur die wurzel des baumes zurück...
ich muss add,insert, delete deswegen in die knoten Klasse packen weil ich ja bei jedem knoten des baummen unterknoten anhängen/löschen will..
Baum->root()->add(..); Baum->root()->GetAt(0)->add(..);so ungefähr
-
pumuckl schrieb:
btw: bei deinem Beispiel oben muesste es
Baum->Root.add()heißen (Zugriffsoperatoren genau andersrum)
Bist du dir da sicher? Baum ist kein Pointer, der Rückgabewert von Root() schon.
@Boris: Was soll denn der Template-Parameter darstellen? (basierend auf deinen früheren Threads - kennzeichnest du damit den konkreten Node-Typ, der eingebunden werden soll?)
-
Hab ich das jetzt falsch verstanden? Du wolltest doch das jeder Knoten einen anderen Typ halten darf/kann?!
-
-
dann wuerde ich beide klassen als extra template schreiben.
template<class T> class TreeNode { public: void add(T& value) { subnodes.add(value); } private: container<T> subnodes; }; template<class T> class Tree { public: T* getRoot(void) { return root; } private: T *root; }; Tree<TreeNode<int> > Baum;vorausgesetzt das ich mir das richtig vorgestellt habe.
soll deine baumstruktur aehnlich einer verzeichnisstruktur sein ?Meep Meep
-
BorisDieKlinge schrieb:
@david: ne immer der gleichen typ!
Nach deinem letzten Thread dachte ich, ich hätte dein Konzept verstanden. Jetzt bin ich mir nicht mehr so sicher.
Die "Allokationen"* präsentieren doch verschiedene Handlungen, die das System zu einer bestimmten Zeit ausführen soll (soweit richtig?). Und die Baumstruktur gruppiert diese Handlungen nach Zeitablauf. Damit kommst du zwangsläufig zu einer heterogenen Baumstruktur (die zumindest zwischen inneren Knoten (Gruppierungen) und Blättern (konkrete Aktionen) unterscheiden muß).
(z.B. besteht die Aktionsgruppe "Mail abfragen" aus den Einzelaktionen "verbinde mit Internet", "öffne Outlook", "hole alle anstehenden Mails vom Server", "schließe Outlook" und "trenne Internet-Verbindung")
* Je öfter ich diese Bezeichnung höre, desto weniger gefällt sie mir. Imho wäre "Aktion" passender.
-
CStoll schrieb:
Die "Allokationen"* präsentieren doch verschiedene Handlungen, die das System zu einer bestimmten Zeit ausführen soll (soweit richtig?). Und die Baumstruktur gruppiert diese Handlungen nach Zeitablauf. Damit kommst du zwangsläufig zu einer heterogenen Baumstruktur (die zumindest zwischen inneren Knoten (Gruppierungen) und Blättern (konkrete Aktionen) unterscheiden muß).
(z.B. besteht die Aktionsgruppe "Mail abfragen" aus den Einzelaktionen "verbinde mit Internet", "öffne Outlook", "hole alle anstehenden Mails vom Server", "schließe Outlook" und "trenne Internet-Verbindung")
schreibt er einen scheduler ?
Meep Meep
-
Meep Meep schrieb:
schreibt er einen scheduler ?
Wenn ich Boris' letzten Beitrag richtig verstanden habe, sowas ähnliches:
BorisDieKlinge schrieb:
Also:
Stell dir vor du Willst eine best. Ressource bspw. ein PC reservieren für eine best zeit. In dem Zeitraum der reservierung wird der PC angeschaltet, es werden e-mail abgerufen, ein Dokument geschrieben, und wieder heruntergefahren.
das sind quasie 4 abläufe die nacheinander folgen, jeweils ne gewisse zeit andauern , und insgesammt die gesmantzeit der Reservierung (Allokation) des PCs
darstellen. Wenn wir nun noch die Gruppieren betrachten, könnte beispielsweise e-mail abrufen durch (Outlock öffnen, e-mail lesen, outlock schliesen) gruppeiren.
-
korrekt.. ich schreibe einen scheduler...