Дано:
struct T {
T(int x) : x(x) {};
void foo() {
std::cout << x;
}
int x;
};
Указатель объекта является неявным первым параметром для функций, и это становится явным при работе с boost::function
.
Вы можете "скрыть" его от func
, связав его рано:
void func(boost::function<void()> cb) {
cb();
}
int main() {
T t(42);
func(boost::bind(&T::foo, &t));
}
Или иначе вы можете связать его поздно:
T t(42);
void func(boost::function<void(T*)> cb) {
cb(&t);
}
int main() {
func(boost::bind(&T::foo, _1));
}
Посмотрите, как это работает здесь .