二叉树递归遍历中 函数指针做形参的有关问题

二叉树递归遍历中 函数指针做形参的问题
template <typename T>
void inorder_recursive(BinaryNode<T>* root, void (*visit)(T &x))

学校题目要求写个二叉树遍历函数,但是给了这么个函数名。。。后面的形参是个函数指针吗?如果只有根节点做单形参的话我还会写,加了这个形参该怎么写啊?
另外如果要用stack不用遍历的话,该怎么改下面的代码?
template <typename T>
void inorder(BinaryNode<T>* root, void (*visit)(T &x))
{
    stack<BinaryNode *> stack1;
    BinaryNode *p=root;
    while(p!=NULL||!stack1.empty())
    {
        while(p!=NULL)
        {
            cout<<p->elem<<" ";
            stack1.push(p);
            p=p->left;
        }
        if(!stack1.empty())
        {
            p=stack1.top();
            stack1.pop();
            p=p->right;
        }
    }
}

------解决方案--------------------
是个函数指针。
你需要写一个函数,像下面这样:
void visit(T &x)
{
    // do somthing to 'x'
}


然后调用:
inorder_recursive(root, visit);
就可以了。

在函数 inorder_recursive() 中,每次处理一个节点,就调用:
visit(x);