Szablon klasy z typem wskaźnika i typem regularnym

Definiuję klasę Node z szablonem dla jej typu wartości

template<class T>
class Node {
  T val;
  public:
    Node (T & v) : val (v) {}
    ...
    void print() { cout << v << endl; }
}

Najczęściej wartość węzła będącego przedmiotem zainteresowania będzie klasą obiektu, powiedzmyclass Foo. W takim przypadku użyjNode<Foo *> będzie wygodniejszy. Ale może też być tak, że węzeł utrzyma prymitywny czas, powiedzmyint. Następnie użyjNode<int> wystarczy.

Problem polega na tym, że niektóre funkcje mogą zachowywać się inaczej w zależności od tego, czyT jest typem wskaźnika lub nie. Na przykład,print powiniencout << *v kiedy jest icout << v Inaczej.

Próbowałem zdefiniować zarówno:

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; }
}

Teraz może wybrać odpowiednią definicję na podstawie tego, czy jestNode<int> or Node<int *> Ale problemem staje się, że dwie definicje będą miały wiele kodów. Zastanawiam się, czy jest lepszy sposób na osiągnięcie tego.

questionAnswers(1)

yourAnswerToTheQuestion