我正在尝试通过继承基本的2-3树容器来实现通用排序树容器
基本树声明如下:
template<typename T>
class Node{
// etc..
}
template<typename T>
class Tree{
Node* root;
// etc
}
并假设我想实现一个整数树,虽然我可以按如下方式声明一个类:
class RankedNode : public Node<int>{
// ...
}
class RankedTree : public Tree<int>{
RankedNode root*; // for example
// ...
}
类RankedNode将包含类Node的其他字段,这有助于快速遍历树(O(log n)),并且通过使用继承,我将能够防止代码重复。
但是,我不知道如何正确地做到这一点,任何想法都将不胜感激:)
答案 0 :(得分:1)
您可以首先在Tree
上创建N
模板(节点类型),而不是T
(值类型):
template<typename T>
class Node{
// etc..
}
template<typename N>
class Tree{
N* root;
// etc
}
这样你可以写
class RankedNode : public Node<int>{
// ...
}
class RankedTree : public Tree<RankedNode>{
// RankedNode* root; <- remove this; it is already in Tree<RankedNode>
// ...
}
并且只添加与基类相比真正新的字段。