我想通过函数指针作为参数将类A的成员函数传递给类B.请告知这条道路是否在某处领先,并帮助我填补坑洼。
#include <iostream>
using namespace std;
class A{
public:
int dosomeA(int x){
cout<< "doing some A to "<<x <<endl;
return(0);
}
};
class B{
public:
B(int (*ptr)(int)){ptr(0);};
};
int main()
{
A a;
int (*APtr)(int)=&A::dosomeA;
B b(APtr);
return 0;
}
这段精彩的代码让我忘记了编译错误:
无法在初始化
中转换int (A::*)(int)' to
int(*)(int)'
首先我希望它能够编译 其次,我不希望dosomeA成为STATIC。
答案 0 :(得分:6)
指向成员的指针与普通函数指针不同。由于编译器错误表明&A::dosomeA
的类型实际上是int (A::*)(int)
而不是int (*)(int)
。
在B
的构造函数中,您需要一个A
的实例来使用.*
或->*
运算符调用该成员。
E.g'
B(int(A::*ptr)(int))
{
A atmp;
(atmp.*ptr)(int);
}
答案 1 :(得分:3)
http://www.parashift.com/c++-faq-lite/pointers-to-members.html
您没有指向返回int并接受int的函数的指针。你有一个指向成员函数的指针,它返回一个int并取一个A *和一个int。您不仅需要修改指针的类型,B还需要提供A *作为dosomeA的this
参数。
Boost :: bind有一些功能,通常用于简化函数指针的使用,它们支持指向成员函数的指针。请参阅here。