我不确定我是否定义了以下情况下的行为:
我的函数指针类型:
typedef void (*DoAfter_cb_type)(void);
Run Code Online (Sandbox Code Playgroud)
应该分配回调的函数:
void DoSomething(DoAfter_cb_type & DoAfter_cb)
{
//...
DoAfter_cb = [](){
//...
};
}
Run Code Online (Sandbox Code Playgroud)
呼叫者:
DoAfter_cb_type DoAfter_cb = nullptr;
DoSomething(DoAfter_cb);
// Here is something that has to be done after DoSomething but before DoAfter_cb.
if( DoAfter_cb != nullptr){
DoAfter_cb();
}
Run Code Online (Sandbox Code Playgroud)
正如我在这里了解到的,lambda 可以隐式转换为函数指针。
然而 thoose 仍然是指针,我担心调用 lambda 的重要内容存储在堆栈中,如果我只返回函数指针,这些内容就会超出范围
我必须使用函数指针,因为我无法在我的环境中访问 std::function 。使用 std::function 我希望 lambda 对象存储在引用变量中,并且不会有任何问题。
行为是否与如果我只定义一个普通函数相同,或者我在这里有任何副作用吗?