繁体   English   中英

C++ 二叉搜索树模板从函数返回节点

[英]C++ Binary Search Tree template return Node from function

我有以下BinaryTree类,其中包含一个名为Node的私有类(除了这个问题所需的内容,我已经省略了所有内容):

template<typename T>
class BinaryTree{
private:
    template<typename NT>
    class Node{
    public:
        Node<NT>* left;
        Node<NT>* right;
        NT item;
    };
public:
    Node<T> Find(T itemToFind);
};

这是相当标准的。 我正在尝试实现返回Node对象的Node FindMax()函数,但我无法弄清楚如何定义它。 例如,我假设(错误地)这就足够了:

template<typename T>
Node<T> BinaryTree<T>::Find(T itemToFind){ // -------> error line
    //...do something....
}

但我收到一条错误消息: No template named Node 我尝试了各种其他组合都无济于事。 如果找到,我不想返回bool ,我想返回Node本身。

您需要添加范围运算符::因为Node类是BinaryTree类的一部分:

template<typename T>
BinaryTree<T>::Node<T> BinaryTree<T>::Find(T itemToFind) {
    //...do something....
}

C++14 引入了auto返回类型,因此以下内容也适用:

template<typename T>
auto BinaryTree<T>::Find(T itemToFind) {
    //...do something....
}

此时, Node类不在范围内。 你需要做这样的事情:

template<typename T>
BinaryTree<T>::Node<T> BinaryTree<T>::Find(T itemToFind) { 
    //...do something....
}

这是 C++11 的尾随返回类型的动机之一,它允许您缩短返回类型。 IIRC,成员函数的尾随返回类型在类的范围内进行评估。

template<typename T>
BinaryTree<T>::Find(T itemToFind) -> Node<T> { 
    //...do something....
}

顺便说一句,你真的希望 Node 类有一个独立于BinaryTree的模板参数的模板参数吗? 也就是说,您可能想要消除第二个模板参数NT

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM