Нестатическую функцию-член нужно вызывать с объектом. То есть он всегда неявно передает «этот» указатель в качестве своего аргумента.
Поскольку ваша подпись std::function
указывает, что ваша функция не принимает никаких аргументов (<void(void)>
), вы должны bind первый (и единственный) аргумент.
std::function<void(void)> f = std::bind(&Foo::doSomething, this);
Если вы хотите связать функцию с параметрами, вам нужно указать заполнители:
using namespace std::placeholders;
std::function<void(int,int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);
Или , если ваш компилятор поддерживает C ++ 11 lambdas:
std::function<void(int,int)> f = [=](int a, int b) {
this->doSomethingArgs(a, b);
}
(у меня нет компилятора C ++ 11 под рукой прямо сейчас , поэтому я могу " t проверить это.)