lambdas和成员函数的回调参数

时间:2011-04-21 23:46:13

标签: boost lambda c++11

我有这个功能:

void func(boost::function<void(float)> cb){
//do something with cb()
}

它适用于lambda和函数。 但它不允许我传递成员函数或成员函数中定义的lambda。

我试图施展这样的东西:

void class::memberFunc() {
void func((void(*)(float))([](float m){}));
}

但看起来lambda在通话中被忽略了。 并且不知道如何传递成员函数。

1 个答案:

答案 0 :(得分:1)

假设:

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

看到它正常工作here