小编mil*_*712的帖子

将 C++ lambda 复制到函数指针引用

我不确定我是否定义了以下情况下的行为:

我的函数指针类型:

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 对象存储在引用变量中,并且不会有任何问题。

行为是否与如果我只定义一个普通函数相同,或者我在这里有任何副作用吗?

c++ lambda scope function-pointers reference

4
推荐指数
1
解决办法
570
查看次数

标签 统计

c++ ×1

function-pointers ×1

lambda ×1

reference ×1

scope ×1