嵌套模板函数中的C ++ 0x Lambda参数

时间:2016-12-28 07:48:33

标签: c++ lambda binary-tree

我正在尝试编写一个通用的树遍历函数,它接受一个模板化的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..."

我做错了什么?

1 个答案:

答案 0 :(得分:1)

template<typename T, typename Func>
void IterateInOrder(struct BinaryTreeNode<T>* root, Func VisitorFunction);

期望指针作为第一个参数,但是您传递BinaryTreeNode<int>的实例。

您可以使用

IterateInOrder(&test_tree, PrintNode);