Подтвердить что ты не робот

Функции привязывающего члена в вариационном режиме

У меня есть функция-член с переменным числом параметров, хранящаяся в 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, но я не вижу, как это сделать для переменных параметров.

4b9b3361

Ответ 1

Решение очень просто, поскольку у вас уже есть количество аргументов и всего:

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...); };
  // ...
}

Пример в реальном времени.