我有一个函数void f (void*, int);
,用作回调函数。调用者期望void (*)(int)
。我可以使用std::bind1st
将其转换为另一个吗?有没有办法在不使用C ++ 11 std::bind
的情况下执行此操作,只需std::bind1st
?
答案 0 :(得分:2)
没有。虽然std::bind1st()
创建了一个功能对象,其中调用操作符采用int
,但不一个void(*)(int)
。将void(*)(void*, int)
转换为void(*)(int)
的唯一方法是使用转发函数从全局资源中获取void*
,例如,
static void* data = 0; // probably needs to be set to a more suitable value
void f_forward(int value) {
f(data, value);
}
任何提供回调的人都没有采用用户定义的上下文,例如,在刚刚传递的类似C的接口void*
中,并没有想到接口太多。