c++ - 我应该如何递归调用模板函数?

标签 c++ templates recursion

我正在尝试用 C++ 创建一个树类 我不确定在使用递归时应该如何使用模板。

例如我有以下功能:

template <typename Data>
void destroyTree(typename AVLTree<Data>::Node* element) {
    if(!element) {
        return;
    }
    destroyTree(element->getLeft());
    destroyTree(element->getRight());
    delete element;
}

或者应该是:

template <typename Data>
void destroyTree(typename AVLTree<Data>::Node* element) {
    if(!element) {
        return;
    }
    destroyTree<Data>(element->getLeft());
    destroyTree<Data>(element->getRight());
    delete element;
}

然后如果我从以下函数调用它:

template <typename Data>
void AVLTree<Data>::function() {
    destroyTree(root);
}

或:

template <typename Data>
void AVLTree<Data>::function() {
    destroyTree<Data>(root);
}

我已经尝试结合上面的大部分可能性,但我总是会出错。 通常它是一个调用的非匹配函数

如果有人对此问题有经验,请帮助我。

谢谢。

如果我使用 Nawaz 的建议,我会收到以下错误:

Internal Builder is used for build ** g++ -O0 -g3 -Wall -c -fmessage-length=0 -oAVLTest.o ..\AVLTest.cpp g++ -oAVLTree.exe AVLTest.o AVLTest.o: In function ZN15Data_Structures7AVLTreeIiE4Node7getLeftEv': C:/Users/Alex/workspace/AVLTree/Debug/../AVLTree.h:(.text$_ZN15Data_Structures11destroyTreeIiEEvPNS_7AVLTreeIT_E4NodeE[void Data_Structures::destroyTree(Data_Structures::AVLTree::Node*)]+0x47): undefined reference toData_Structures::AVLTree::Node::~Node()' collect2: ld returned 1 exit status Build error occurred, build is stopped Time consumed: 532 ms.

我能用它做什么?

所有相关代码都是here .

最佳答案

这是正确的:

//in the first case
destroyTree<Data>(element->getLeft());
destroyTree<Data>(element->getRight());

//in the second case
destroyTree<Data>(root);

也就是说,您必须指定模板参数,因为编译器无法从函数参数中推导出它,因为它是不可推导的上下文。

关于c++ - 我应该如何递归调用模板函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13765799/

相关文章:

xml - 将两个 XSLT 模板应用于同一元素的最佳方式

algorithm - 唐叶算法

c++ - 为什么 C++ 对具有负值的枚举发出警告?

c++ - 为什么我可以使用 for 循环而不是单独访问 C++ map 元素?

c++ - 很难在 multimap<Class object, enum> 上使用 max_element(也有 min_element)

c++ - 共享库中静态对象的销毁顺序

c++ - 无法为 C++ 函数模板分配较短的名称

c++ - 使用模板应用功能模板

haskell - 为什么haskell中的递归列表这么慢?

php - 返回随机数但不是 2