12

我有一个带有可变数量参数的成员函数,存储在 astd::function中,我想绑定实例并获取一个独立的函数对象。

template <class T, class R, class... Args>
void connect(const T& t, std::function<R(const T&, Args...)> f) {
  std::function<R(Args...)> = /* bind the instance c into the function? */
}

// ...

Class c;
connect(c, &Class::foo);

对于固定数量的参数,我会使用std::bind,但我不知道如何为可变参数执行此操作。

4

1 回答 1

15

解决方案非常简单,因为您已经拥有大量参数和所有内容:

template <class T, class R, class... Args>
void connect(const T& t, std::function<R(const T&, Args...)> f) {
  // or capture 't' by-value
  std::function<R(Args...)> fun = [&t,f](Args... args){ f(t,args...); };
  // ...
}

活生生的例子。

于 2012-08-10T13:53:46.913 回答