C ++模板二叉树实现

时间:2014-08-16 22:25:00

标签: c++ templates

我的二叉树实现看起来像这样:

template <class T, template <class> class NodeType = BinaryTreeNode>
class BinaryTree : public Tree<T>
{
  int size;
  NodeType<T> *root;

  public:

  ~BinaryTree()
  {
    if(root != NULL)
    {
      delete root;
    }
  }
  BinaryTree()
  {
    this->size = 0;
    this->root = NULL;
  }

  bool create();
  bool insert(T p);
}

现在,我无法拨打BinaryTree::insert(T p)

如果我这样做:

bool BinaryTree<class T, template <class> class BinaryTreeNode >::insert(T data)
{
  NodeType<T> *bNode = new NodeType<T>(data);
}

g ++会抛出以下错误:

  

BinaryTree.cxx:11:错误:模板参数2无效

实际上,我复制了代码:

template <class T, template <class> class NodeType = BinaryTreeNode>

来自某个地方,但我完全不明白。 任何人都可以告诉我如何调用这个类的函数,这个模板声明如何工作?

1 个答案:

答案 0 :(得分:0)

  

现在,我无法调用BinaryTree :: insert(T p)。

我相信你混淆了一些话。您似乎没有尝试调用该功能。您正在定义该功能。

此语法对于定义模板类的成员函数无效:

bool BinaryTree<class T, template <class> class BinaryTreeNode >::insert(T data)

这是一个正确的版本:

template <class T, template <class> class NodeType>
bool BinaryTree<T, NodeType>::insert(T data)

您实施的实施会立即泄漏已分配的数据,但我认为它仍未完成。