【发布时间】:2018-04-05 07:31:54
【问题描述】:
我不确定我是否定义了以下情况下的行为:
我的函数指针类型:
typedef void (*DoAfter_cb_type)(void);
应该分配回调的函数:
void DoSomething(DoAfter_cb_type & DoAfter_cb)
{
//...
DoAfter_cb = [](){
//...
};
}
来电者:
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();
}
据我所知here lambda 可以隐式转换为函数指针。
但是这些仍然是指针,我担心调用 lambda 的一些重要内容存储在堆栈中,如果我只返回函数指针就会超出范围
我必须使用函数指针,因为我无法在我的环境中访问 std::function。 使用 std::function 我希望 lambda 对象存储在引用变量中,我不会有任何问题。
行为是否与如果我只定义一个普通函数一样,还是在这里有任何副作用?
【问题讨论】:
-
Boost 没有
boost::function<>吗? IIRC C++11 从那里得到它。 -
不幸的是我也不能使用 boost。
标签: c++ lambda scope reference function-pointers