如何使用指向方法的指针作为参数(当需要指向函数的指针时)?

时间:2013-02-05 20:19:38

标签: c++ function pointers methods function-pointers

我有一些第三部分代码:

class A(){
    public:
        void assingOnClickFunction(void (*function)(); 
};

我无法更改该代码中的任何内容。 我想传递给A::assingOnClickFunction()我的B类方法void B::someFunction()。我试过了(B类的所有里面!):

a->assingOnClickFunction(this->someFunction);

但我收到错误:

  

函数调用缺少参数列表;使用'& B :: someFunction'来创建   指向成员的指针

所以我把它改成了:

a->assingOnClickFunction(&B::someFunction);

但现在有不同类型的错误:(void(*)()(&B::*)()

我无法使B::someFunction()静态(它使用了很多非静态B的成员和方法)!

所以,可以选择将我的 B::someFunction() 传递给 A::assingOnClickFunction(),而不是将其更改为静态而不更改{ {1}}类(A不是,也不知道AB包含B

3 个答案:

答案 0 :(得分:3)

如果您要传递的成员函数不是static,则不能这样做。 A中的方法接受一个没有参数的函数的函数指针,非静态成员函数有一个隐式的this指针参数。

答案 1 :(得分:2)

为了调用对象的(非静态)方法,您需要知道要调用的对象和方法。

assingOnClickFunction()函数只接受一个指向函数的指针,因此你无法传递所需的信息。

除了一些可怕的黑客攻击,比如实现一个可以访问对象的某个全局实例的函数,然后调用该方法,它就无法完成。

答案 2 :(得分:1)

指向成员函数的指针是不是指向函数的指针。如果你有一个函数接受一个类型为指向函数的参数,你不能用成员函数指针调用它。