绑定成员以可变方式运行

时间:2012-08-10 13:36:02

标签: c++ templates c++11 variadic-templates std-function

我有一个带有可变数量参数的成员函数,存储在std::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,但我不知道如何为变量参数执行此操作。

1 个答案:

答案 0 :(得分: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...); };
  // ...
}

Live example.