我的计划是构建几个拥有预定义“回调挂钩”的监听器类。
在下面的示例中,类Foo
有一个名为onChange
. 它将在构造过程中设置为默认回调函数。它也可以设置为提供正确接口的任意函数,如 objectf1
和 function所示callback()
。
问题是当我想onChange
在 for 循环中调用对象成员时,编译器说我提供了很多参数。我知道我没有提供成员函数std::mem_fn
而是提供一个对象成员的问题,它是一个函数包装器。
我如何设法将参数传递给std::function
类的成员对象,Foo
而不使用std::bind
和使用std::mem_fn
,如示例中所示?
struct Foo
{
Foo()
{
// default callback
onChange = [](int value)
-> void { std::cerr << "Foo::onChange( " << value << " )" << std::endl; };
}
// class destructor
virtual ~Foo() {}
std::function<void(int value)> onChange;
};
void callback(int value)
{
std::cerr << "callback( " << value << " )" << std::endl;
}
int main()
{
Foo f0;
Foo f1;
f1.onChange = callback;
auto vec = std::vector<Foo>();
vec.push_back(f0);
vec.push_back(f1);
auto func_wrapper = std::mem_fn( &Foo::onChange );
for (auto f : vec)
{
func_wrapper(f, 42);
}
}