C++模板类继承,如何规范成员类型

C++ Template class Inheritance, how to member type specification?

本文关键字:何规范 成员 成员类 类型 继承 C++      更新时间:2023-10-16
template <typename _datTy>   
class ANode{
typedef ANode<_datTy> _nodeTy;
public:
    std::vector<_nodeTy> childVector;
};
template <typename _datTy, class _nodeTy = ANode>
 ATree
{
public :
    void doSomeThing()
    {
        auto iter = _root.childVector.begin();
    }
protected:
    _nodeTy _root;
};


template <typename _datTy>
class BNode :
    public ANode<_datTy>
{
typedef BNode<_datTy> _nodeTy;
public:
    bool somethingExtends;
};
template <typename _datTy>
 BTree :
    public ATree<_datTy, BNode<_datTy>>
{
 ...
};

BTree<char> test;
test.doSomeThing();

此代码问题是std::vector<_nodeTy> childVector。它在BTree编译时被翻译成std::vector<Anode<_datTy>>

但我真的很想要这个,ATree编译时的std::vector<Anode<_datTy>>,以及BTree编译时的std::vector<Bnode<_datTy>>

在当前的体系结构点上,我没有使用像std::vector<_nodeTy *>这样的基类指针。

怎么知道这个问题?感谢您的阅读。

您正在寻找Curioly递归模板模式。大致如下:

template <typename NodeType>   
class XNode{
public:
    std::vector<NodeType> childVector;
};
template <typename DataType>   
class ANode : public XNode<ANode<DataType>> {};
template <typename DataType>   
class BNode : public XNode<BNode<DataType>> {};