想将函数指针作为参数调用,却发现必须是静态指针吗?
打个比方,我写了一个树类Tree,其中包含树的根节点.每个节点都记录了自己的儿子.
其中有一个dps函数,第一个参数是要遍历的节点,第二个参数是要对该节点做的事情.
class Tree
{
Node * root;
void dps(Node * t,void (*work)(Node * n));
void work1(Node*n);
void work2(Node*n);
void work3(Node*n);
//...
}
这么一个结构.
但我试图运行`dps(root,work1)`的时候,我发现它要求work1必须是静态函数?
而如果我把work1设置成静态函数,它会很麻烦,因为它还使用了Tree类里的其他成员.
这种场合我该怎么做比较好?
class Node{};
class Tree
{
public:
Node * root;
void dps(Node * t,void (Tree::*work)(Node * n)){
(this->*work)(t);
};
void work1(Node*n){};
};
void foo() {
Node n;
Tree t;
t.dps(&n, &Tree::work1);
}
当然也可以用一个静态函数,然后多接受一个 "Tree*" 的参数,把 "this" 通过这个参数穿进去:
class Node{};
class Tree
{
public:
Node * root;
void dps(Node * t,void (*work)(Tree*, Node*)){
work(this, t);
};
static void work1(Tree*t,Node*n){};
};
void foo() {
Node n;
Tree t;
t.dps(&n, &Tree::work1);
}