使用模板和继承的容器实现

时间:2014-05-01 08:09:23

标签: c++ templates inheritance

我正在尝试通过继承基本的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)),并且通过使用继承,我将能够防止代码重复。

但是,我不知道如何正确地做到这一点,任何想法都将不胜感激:)

1 个答案:

答案 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>

    // ...
}

并且只添加与基类相比真正新的字段。