从调用该变量时存储的函数/ lambda表达式中将std :: function变量设置为nullptr是否合法C ++(这意味着没有未定义的行为等)?
我的意图是省略对std :: function的调用。
#include <functional>
std::function<void(int)> func;
void setFunc(std::function<void(int)> f) {
func = f;
}
int main() {
setFunc([](int status) {
// do something...
setFunc(nullptr); // callback shall only be called once
});
for(;;) {
int status = 0;
// fetch status
if (func)
func(status);
}
}
答案 0 :(得分:0)
您的问题是另一个有趣的转折,即:
重要的是要谨慎避免事后使用lambda状态。
您的lambda是无状态的?这很简单。
但是无论如何,您确定您的实际设计没有其他更清洁的选择吗?例如,std::call_once()
在这个过于简化的示例中会更加明显。
答案 1 :(得分:0)
您还可以使用空的初始化列表将std::function<void(int)>
对象设置为默认构造的对象:
setFunc({});
为避免在调用函数对象时分配给它,您可能希望对其进行复制并调用该副本。