可以使用std :: bind1st将void(*)(void *,int)转换为void(*)(int)吗?

时间:2013-12-16 09:53:08

标签: c++ stdbind

我有一个函数void f (void*, int);,用作回调函数。调用者期望void (*)(int)。我可以使用std::bind1st将其转换为另一个吗?有没有办法在不使用C ++ 11 std::bind的情况下执行此操作,只需std::bind1st

1 个答案:

答案 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*中,并没有想到接口太多。