[英]How to pass a member function as a parameter to a function that doesn't expect it?
说我有一个函数foo
:
void foo(void (*ftn)(int x))
{
ftn(5);
}
它需要一个接受int作为参数的void
函数作为参数。 考虑
void func1(int x) {}
class X {
public:
void func2(int x) {}
};
现在foo(&func1)
可以了。
但是foo(&X::func2)
因为X::func2
不是静态的,并且需要上下文对象,并且其函数指针类型不同。
我从X
内部尝试了foo(std::bind(&X:func2, this))
,但这也引发了类型不匹配的情况。
正确的做法是什么?
根据注释,如果您不能将foo
的签名更改为采用原始函数指针之外的任何形式,那么您将必须执行以下操作:
struct XFunc2Wrapper {
static X* x;
static void func2(int v) {
x->func2(v);
}
};
然后,一旦将XFunc2Wrapper::x
设置为X
就执行foo(&XFunc2Wrapper::func2)
。 它不必嵌套在结构中,而可以只是一些全局指针,但是嵌套有助于更好地建立代码背后的意图。
但这绝对是(按照Obvlious上尉的)尝试做foo(std::function<void(int)> )
之后的不得已的手段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.