如果我有这门课
class TextBox : public Widget {
public:
void addKeyPressHandler(std::function<void (std::string)>);
private:
std::function<void (std::string)> keyPressHandler;
};
我如何知道 keyPressHandler 是否已设置?我可以将其初始化为 NULL 然后对其进行测试吗?
如果我有这门课
class TextBox : public Widget {
public:
void addKeyPressHandler(std::function<void (std::string)>);
private:
std::function<void (std::string)> keyPressHandler;
};
我如何知道 keyPressHandler 是否已设置?我可以将其初始化为 NULL 然后对其进行测试吗?
您可以使用operator bool
成员函数
20.8.11.2.3 函数容量[func.wrap.func.cap]
explicit operator bool() const noexcept;
返回:如果 *this 有一个目标,则返回 true,否则返回 false。
#include <iostream>
#include <functional>
int
main ()
{
std::function<void()> f;
std::cout << (bool) f << std::endl;
f = [](){};
std::cout << (bool) f << std::endl;
}
std::function
允许您通过它的operator bool()
.
例如:
if (keyPressHandler)
{
keyPressHandler(someString);
}
else
// TODO: Consider queuing events here if you don't want to miss keystrokes.
}
...只有当它有一个有效的目标时才会调用该函数。这意味着它已经被分配了一个函数指针,或者自从它被初始化以来任何其他可调用的东西。
您可以在布尔上下文中对其进行测试(如其他答案所述)
if (keyPressHandler)
...
或者您可以将其与nullptr
if (keyPressHandler != nullptr)
...
当然,自己查找文档比提出问题并等待答案要快。从 Sean Cline 链接到的文档中可以明显看出,该文档operator bool()
“检查是否包含有效目标”