凸然

如何判断c++11中的std::function对象是否为空?

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对象是否为空?