我有这个功能:
void func(boost::function<void(float)> cb){
//do something with cb()
}
它适用于lambda和函数。 但它不允许我传递成员函数或成员函数中定义的lambda。
我试图施展这样的东西:
void class::memberFunc() {
void func((void(*)(float))([](float m){}));
}
但看起来lambda在通话中被忽略了。 并且不知道如何传递成员函数。
答案 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。