C++ 如何使用指向方法的指针作为参数(当需要指向函数的指针时)?
我有一些第三部分代码:C++ 如何使用指向方法的指针作为参数(当需要指向函数的指针时)?,c++,function,pointers,methods,function-pointers,C++,Function,Pointers,Methods,Function Pointers,我有一些第三部分代码: class A(){ public: void assingOnClickFunction(void (*function)(); }; 我无法更改该代码中的任何内容。 我想传递给A::assinginclickfunction()我的类B方法,void B::someFunction()。我已经试过了(所有的都是B班的): 但我得到了一个错误: 函数调用缺少参数列表;使用“&B::someFunction”创建 指向成员的指针 所以我把它改成
class A(){
public:
void assingOnClickFunction(void (*function)();
};
我无法更改该代码中的任何内容。
我想传递给A::assinginclickfunction()
我的类B方法,void B::someFunction()
。我已经试过了(所有的都是B班的):
但我得到了一个错误:
函数调用缺少参数列表;使用“&B::someFunction”创建
指向成员的指针
所以我把它改成:
a->assingOnClickFunction(&B::someFunction);
但是现在有关于不同类型的错误:(void(*)(
)和(&B::*)()
我不能使B::someFunction()
静态(它使用了大量非静态B
的成员和方法)
因此,是否有一个选项可以将my
B::someFunction()
传递给A::assingOnClickFunction()
,不将其更改为静态,也不更改A
类中的任何内容(A
不知道B
,B
包括A
)?如果要传递的成员函数不是静态的
,则不能这样做。A
中的方法接受指向没有参数的函数的函数指针,而非静态成员函数有一个隐式的此
指针参数。指向成员函数的指针是而不是A p指向函数的指针。如果函数的参数类型为指向函数的指针,则不能使用指向成员函数的指针调用该函数。要调用对象的(非静态)方法,需要知道对象和要调用的方法
assingOnClickFunction()函数只接受指向函数的指针,因此无法向其传递所需的信息
除了一些可怕的攻击,比如实现一个可以访问对象的全局实例的函数,并通过该函数调用方法,这是无法完成的。是您要传递的成员函数
static
?正如我所写的,它不是静态的,我无法将其更改为静态。尝试它会出现错误:“type cast”:无法c从“void(uu thiscall B::*)(void)”转换为“void*”,请在询问之前先用谷歌搜索——事实上,我一直在考虑类似于“hacks”的东西。但我想我应该重建我的代码,并用其他方式来实现它(如果有全局实例和函数可以访问它,这看起来会非常可怕)。
a->assingOnClickFunction(&B::someFunction);