-1

我有一些第三部分代码:

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的成员和方法)!

那么,是否可以选择将 my 传递 B::someFunction() A::assingOnClickFunction(),而不是将其更改为 static 并且不更改A课堂上的任何内容(A不知道也不知道BB包括A

4

3 回答 3

3

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

于 2013-02-05T20:23:30.967 回答
2

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

assingOnClickFunction() 函数只接受一个指向函数的指针,因此您不能将所需的信息传递给它。

除了一些可怕的 hack,比如实现一个可以访问对象的某个全局实例的函数,并通过它调用该方法,它无法完成。

于 2013-02-05T20:26:29.553 回答
1

指向成员函数的指针不是指向函数的指针。如果您有一个函数,其参数类型为指向函数的参数,则不能使用指向成员函数的指针调用它。

于 2013-02-05T20:26:11.003 回答