c++11中的std::function非常好用,结合lamada表达式和std::bind,能极大的简化以前实现复杂的代码逻辑。
但今天写一个功能时,需要判断std::function对象是否为空的,网上搜索了一,这方面的资料不多,找到的也都不太全。
所以本人结合网上的资料和自己的尝试,总结了两种办法。
// 由于std::funtcion重载了 operator bool() 方法,
//std::function 源码部分代码。
...
explicit operator bool() const _NOEXCEPT {
return static_cast<bool>(__f_);
}
...
// 所以在代码里可以直接if来判断,示例:
std::function<void()> test; // empty
if (test){
std::cout << "test 非空,可调用" << std::endl;
}else{
std::cout << "test 是空的,不可调用" << std::endl;
}
// 非常简单。
// 第二种相当于把std::function当成指针样使用,
std::function<void()> fun = []()
{
std::cout << "fun test" << std::endl;
};
if (fun != nullptr){
fun();
}
fun = nullptr;
if (fun == nullptr){
std::cout << "fun is nullptr" << std::endl;
}
// 这样效果也是一样的。
版权声明:本文为凸然网站的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:如何判断c++11中的std::function对象是否为空?