我知道这已经是一个讨论已久的话题,但我还找不到令我满意的答案。
简而言之,问题是:即使使用 C++11 的 function::target() 功能,是否也无法将成员函数指针传递给 c 风格的方法?
以下代码将不起作用:对 mbf.target() 的调用将返回 0,从而生成 SEGFAULT。我不明白为什么,因为我将成员函数绑定到通用函数对象,所以类型应该没问题。
我做错了什么或者我正在尝试做一些不可能的事情?
#include <functional>
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<void(int,int)> mbf =
bind(mbMem, *this, placeholders::_1, placeholders::_2);
regCallback(*mbf.target<void(*)(int,int)>());
}
};
int main()
{
A inst;
inst.registerCallback();
}
您的成员函数不是类型void (*)(int, int)
它是类型void (A::*)(int, int)
。所以target
回报nullptr
因为您尝试转换为错误的类型。我建议只做CBType
a std::function<void(int, int)>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)