0
说我有一个功能foo
:如何将成员函数作为参数传递给不期望的函数?
void foo(void (*ftn)(int x))
{
ftn(5);
}
它需要作为参数void
函数接受一个int作为参数。考虑
void func1(int x) {}
class X {
public:
void func2(int x) {}
};
现在 foo(&func1)
是确定的。
但foo(&X::func2)
也不行,因为X::func2
也不是一成不变的,需要上下文对象及其函数指针型是不同的。
我试过foo(std::bind(&X:func2, this))
从X
里面,但这也引起类型不匹配。
这样做的正确方法是什么?
考虑改变你的函数,把'std :: function'作为它的参数。这样你可以使用'std :: bind'来透明地使用一个自由函数,静态成员函数或者非静态成员函数。 – 2014-11-01 18:32:13
模板函数foo最有可能是最简单的解决方案。编辑:是的,如上所述,更简单的可能是std :: function – Creris 2014-11-01 18:32:15
如果我不允许更改'foo'(库的一部分)怎么办? – batman 2014-11-01 18:39:52