如何链接两种不同类型的节点? (模板类)

时间:2014-11-06 08:52:39

标签: c++ templates nodes

我正在制作一个模板化的类,它由两个链接在一起的二叉搜索树组成。 例如,字符串树和整数树。

但是,我在创建链接时遇到了麻烦。

我对节点的所作所为:

template <class T>
class Node {

T data;
Node* link;
Node* left;
Node* right;

}

如果我打电话

Node<string> newstring = new Node<string>();
Node<int> newint = new Node<int>();
newstring -> link = newint;
newint -> link = newstring;

我会得到

error: cannot convert ‘Node<int>*’ to ‘Node<std::basic_string<char> >*
error: cannot convert ‘Node<std::basic_string<char> >* to ‘Node<int>*’

如何链接两种不同类型的节点?

2 个答案:

答案 0 :(得分:1)

您可以通过基类实现它:

class BaseNode {
};

template <class T>
class Node : public BaseNode {
public:
    BaseNode * link;
    BaseNode * left;
    BaseNode * right;
};

然后

Node<string> * newstring = new Node<string>();
Node<int> * newint = new Node<int>();
newstring -> link = newint;
newint -> link = newstring;

也许你需要添加一些代码来识别指针所指向的实际类型。这应该是一个设计问题。

答案 1 :(得分:1)

我会研究基类。

看起来Node的设计有问题。 我可能会做类似

的事情
template <class T, class S>
class Node {

T data;
Node<S,T>* link;
Node<T,S>* left;
Node<T,S>* right;

}