我想知道如何正确检查an std::function
是否为空。考虑以下示例:
class Test {
std::function<void(int a)> eventFunc;
void registerEvent(std::function<void(int a)> e) {
eventFunc = e;
}
void doSomething() {
...
eventFunc(42);
}
};
这段代码在MSVC中可以很好地编译,但是如果我doSomething()
不初始化就调用eventFunc
该代码,则显然会崩溃。这是预期的,但我想知道的价值是eventFunc
什么?调试器说'empty'
。所以我用简单的if语句解决了这个问题:
void doSomething() {
...
if (eventFunc) {
eventFunc(42);
}
}
这有效,但我仍然想知道未初始化的值是std::function
什么?我想写,if (eventFunc != nullptr)
但是std::function
(显然)不是指针。
为什么纯如果有效?它背后的魔力是什么?而且,这是检查方法的正确方法吗?
eventFunc
不是lambda。这是一个std::function
。您可以将Lambda存储在std::function
s中,但它们不是一回事。