【发布时间】:2014-03-15 10:10:31
【问题描述】:
我想知道如何正确检查 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 中编译得很好,但是如果我在没有初始化 eventFunc 的情况下调用 doSomething(),代码显然会崩溃。这是意料之中的,但我想知道eventFunc 的价值是多少?调试器说'empty'。所以我使用简单的 if 语句解决了这个问题:
void doSomething() {
...
if (eventFunc) {
eventFunc(42);
}
}
这可行,但我仍然想知道未初始化的std::function 的价值是什么?我想写if (eventFunc != nullptr),但std::function(显然)不是指针。
为什么纯 if 有效?它背后的魔力是什么?而且,检查方法是否正确?
【问题讨论】:
-
请注意,
eventFunc不是 lambda;这是std::function。您可以将 lambdas 存储在std::functions 中,但它们不是一回事。 -
你说得对,我改了标题以避免混淆。谢谢。
标签: c++ c++11 std-function