12

に格納された可変数のパラメーターを持つメンバー関数があり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しますが、可変個引数パラメーターに対してこれを行う方法がわかりません。

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 に答える