簡體   English   中英

如何鏈接兩種不同類型的節點? (模板類)

[英]How can I link Nodes of two different types? (templated classes)

我正在制作一個包含兩個鏈接在一起的二進制搜索樹的模板化類。 例如,一棵字符串樹和一個整數樹。

但是,我在創建鏈接時遇到了麻煩。

我對節點有什么:

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>*’

如何鏈接兩種不同類型的節點?

您可以通過基類來實現:

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;

也許您需要添加一些代碼來識別指針所指向的實際類型。 這應該是一個設計問題。

我將研究基類。

看來Node的設計有問題。 我可能會做類似的事情

template <class T, class S>
class Node {

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM