![](/img/trans.png)
[英]error: could not convert ‘print’ from ‘void (*)(int)’ to ‘std::function<void()>’
[英]Can std::bind1st be used to convert void (*)(void*,int) to void (*)(int)?
我有一个函数void f (void*, int);
,用作回调函数。 调用者期望void (*)(int)
。 我可以使用std::bind1st
将一个转换为另一个吗? 有没有办法在不使用C ++ 11 std::bind
情况下执行此操作,只需要std::bind1st
?
std::bind1st()
。虽然std::bind1st()
使用调用操作符take和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*
,并没有想到界面太难。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.