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