0

我的计划是构建几个拥有预定义“回调挂钩”的监听器类。

在下面的示例中,类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);
  }
}
4

0 回答 0