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.