我正在尝试编写一个通用的树遍历函数,它接受一个模板化的BinaryTreeNode和一个lambda。我不确定为什么当我使用它时,编译器一直说它无法找到函数......这里有一些代码:
template<typename T>
struct BinaryTreeNode
{
T Data;
struct BinaryTreeNode* Parent;
struct BinaryTreeNode* Left;
struct BinaryTreeNode* Right;
};
template<typename T, typename Func>
void IterateInOrder(struct BinaryTreeNode<T>* root, Func VisitorFunction)
{
typename std::stack< struct BinaryTreeNode<T>* > node_stack;
struct BinaryTreeNode<T>* current = root;
while(true)
{
if(current != nullptr)
{
node_stack.push(current);
current = current->Left;
}
else
{
if(!node_stack.empty())
{
current = node_stack.top();
VisitorFunction(current);
node_stack.pop();
current = current->Right;
}
else
{
break;
}
}
}
}
BinaryTreeNode<int> test_tree;
test_tree.Data = 100;
test_tree.Parent = nullptr;
test_tree.Left = nullptr;
test_tree.Right = nullptr;
auto PrintNode = [](struct BinaryTreeNode<int>* node)
{
printf("%d", node->Data);
};
IterateInOrder(test_tree, PrintNode); //won't compile. "No matching function..."
我做错了什么?
答案 0 :(得分:1)
template<typename T, typename Func>
void IterateInOrder(struct BinaryTreeNode<T>* root, Func VisitorFunction);
期望指针作为第一个参数,但是您传递BinaryTreeNode<int>
的实例。
您可以使用
IterateInOrder(&test_tree, PrintNode);