我知道这已经是一个长期讨论的话题,但我还没有找到满足我的答案.
简而言之:即使使用C 11的function :: target()功能,是不是可以将成员函数指针传递给c风格的方法?
以下代码不起作用:对mbf.target()的调用将返回0,从而生成SEGFAULT.我不明白为什么,因为我将成员函数绑定到泛型函数对象,所以类型应该没问题.
我做错了什么或者我想做一些不可能的事情?
#include
using namespace std;
typedef void (*CBType)(int, int);
CBType myCB = 0;
void regCallback(CBType cb)
{
myCB = cb;
}
class A
{
public:
void memberCB(int a, int b) {}
void registerCallback()
{
auto mbMem = mem_fn(&A::memberCB);
function mbf =
bind(mbMem, *this, placeholders::_1, placeholders::_2);
regCallback(*mbf.target());
}
};
int main()
{
A inst;
inst.registerCallback();
}