値型のテンプレートを使用して Node クラスを定義します
template<class T>
class Node {
T val;
public:
Node (T & v) : val (v) {}
...
void print() { cout << v << endl; }
}
ほとんどの場合、対象のノード値はオブジェクト クラス、たとえばclass Foo
です。その場合、ご利用Node<Foo *>
がより便利になります。しかし、ノードがプリミティブ時間を保持する可能性もありますint
。それから使用Node<int>
は十分です。
T
問題は、一部の関数がポインター型であるかどうかに基づいて異なる動作をする必要がある場合があることです。たとえば、print
あるcout << *v
場合とcout << v
そうでない場合です。
私が試したのは、両方を定義することです:
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; }
}
Node<int> or Node<int *>
しかし問題は、2 つの定義が多くのコードを共有することです。これを達成するためのより良い方法があるかどうか疑問に思っています。