Klassenvorlage mit Zeigertyp und regulärem Typ
Ich definiere eine Knotenklasse mit Vorlage für ihren Wertetyp
template<class T>
class Node {
T val;
public:
Node (T & v) : val (v) {}
...
void print() { cout << v << endl; }
}
In den meisten Fällen ist der interessierende Knotenwert beispielsweise eine Objektklasseclass Foo
. In diesem Fall verwenden SieNode<Foo *>
wird bequemer sein. Es kann aber auch sein, dass der Knoten beispielsweise die Grundzeit enthältint
. Dann benutzeNode<int>
wird genügen.
Das Problem ist, dass sich einige der Funktionen möglicherweise anders verhalten müssen, je nachdem, obT
ist ein Zeigertyp oder nicht. Zum Beispiel,print
solltecout << *v
wenn es ist undcout << v
Andernfalls.
Ich habe versucht, beide zu definieren:
template<class T>
class Node {
T val;
public:
Node (T & v) : val (v) {}
...
void print() { cout << v << endl; }
}
template<class T>
class Node<T*> {
T* val;
public:
Node (T* v) : val (v) {}
...
void print() { cout << *v << endl; }
}
Es kann nun die passende Definition basierend darauf auswählen, ob es eine istNode<int> or Node<int *>
Aber das Problem wird, dass die beiden Definitionen viele Codes gemeinsam haben. Ich frage mich, ob es einen besseren Weg gibt, dies zu erreichen.