[英]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.