我为它的值类型定义了一个带有模板的 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 *>
但是问题就变成了,这两个定义会共享很多代码。我想知道是否有更好的方法来实现这一点。