如何将非静态函数作为参数传递给函数指针?-灵析社区

猫界袁隆平

想将函数指针作为参数调用,却发现必须是静态指针吗? 打个比方,我写了一个树类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类里的其他成员. 这种场合我该怎么做比较好?

阅读量:15

点赞量:0

问AI
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); }