假设我有一个像这样的全局函数指针:
void (*Callback)(My_special_t*);
如果我想给它分配一个lambda,我会这样做:
Callback = [](My_special_t* instance) {
//Useful stuff
};
我真正想做的是这样的事情:
Callback = [](My_special_t* instance) {
//Useful stuff
Callback = /* Somehow get the current lambda? */
};
所以我的问题是:
是否有可能从内部引用一个lambda对象.....如果是这样的话?
答案 0 :(得分:1)
我知道lambda是非常酷的功能,因为它很酷,它被过度使用。 在这里尝试强制lambda会产生问题。
只需定义一个功能,问题就解决了。
void myNiceFunction(My_special_t *instance) {
instance->doStuff();
… … …
if (instance->next) {
myNiceFunction(instance->next);
}
}
它更好,因为它是自我记录(如果提供好名称)并且它是可测试的(测试可以直接到达此功能)。
答案 1 :(得分:0)
您可以使用std::function
执行此操作,如下所示:
#include <functional>
#include <iostream>
using std::cout;
using std::function;
struct My_special_t
{
};
int main()
{
function<void(My_special_t*)> Callback;
auto otherCallback = [](My_special_t* instance)
{
cout << "otherCallback " << static_cast<void*>(instance) << "\n";
};
Callback = [&Callback, &otherCallback](My_special_t* instance)
{
cout << "first callback " << static_cast<void*>(instance) << "\n";
Callback = otherCallback;
};
My_special_t special;
Callback(&special);
Callback(&special);
}