0

我有一个函数void f (void*, int);,用作回调函数。调用者期望void (*)(int). 我可以std::bind1st用来将一个转换为另一个吗?有没有办法在不使用 C++ 11 的情况下做到这一点std::bind,只是std::bind1st

4

1 回答 1

2

不。虽然std::bind1st()创建了一个带有调用运算符的函数对象,int但它不是void(*)(int). void(*)(void*, int)将 a变为 a的唯一方法是拥有一个从全局资源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);
}

任何提供不采用用户定义上下文的回调的人,例如,在void*刚刚通过的类 C 接口 a 中,都不会对接口考虑太多。

于 2013-12-16T09:59:06.993 回答