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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage