Forum: Compiler & IDEs C++ & Templates


von Alex (Gast)


Lesenswert?

Hallo,

folgendes Problem:

Ich habe eine Klasse für Baumknoten deren Key ich variabel halten 
möchte:

template<class TKey> class MyCNode
{
    ...
}

Ein Anwender kann diese Klasse als Basisklasse für seine Daten 
verwenden.

Der Baum sieht nun wie folgt aus:

template<template<class TKey>class MyCNode> class MyCTree
{
    ...
}

Wenn ich jetzt in der Klasse eine Methode deklariere, so kennt er laut 
Meldung TKey nicht:

int insertNode(MyCNode<TKey>* const pNode);

Wie würdet ihr das Interface der Baumklasse gestalten, um zu erzwingen, 
dass nur von MyCNode abgeleitete Klassen als Templateargument akzeptiert 
werden?


Gruß,
Alex

von Uhu U. (uhu)


Lesenswert?

Versuchs mal so:

   template<class MyCNode> class MyCTree
   {
       ...
   }

MyNode kann ja alles mögliche sein, was will der Compiler erst man 
garnicht wissen.

von Alex (Gast)


Lesenswert?

Ich will aber nicht sagen:

Hier ist eine Baumklasse die irgendeinen Template-Parameter hat.

Sondern:

Hier ist eine Baumklasse, die als Template-Parameter den Typen MyCNode 
(oder eine davon abgeleitete Klasse) mit dem Template-Parameter TKey 
hat.

von Ingo E. (ogni42)


Lesenswert?

1
template<class TKey> class Node
2
{
3
    ...
4
};
5
6
class Tree
7
{
8
public:
9
   void addNode(Node& newNode);
10
};

Mehr ist eigentlich nicht nötig. Tree braucht keinen Templateparameter

von Alex (Gast)


Lesenswert?

Ganz so einfach ists leider nicht :-)
1
class Tree
2
{
3
public:
4
   void getNode(TKey Key, Node& existingNode);
5
};

Da brauchts TKey dann doch.

Gruß,
Alex

von Rolf Magnus (Gast)


Lesenswert?

1
template<class TKey> class MyCNode
2
{
3
public:
4
    typedef TKey KeyType;
5
}
6
7
template<typename Node>
8
class Tree
9
{
10
public:
11
   void getNode(Node::KeyType Key, Node& existingNode);
12
};

von Alex (Gast)


Lesenswert?

Danke Rolf, das liegt wohl dem was ich erreichen will am nächsten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.