验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

C++11中的std::function怎么使用

阅读:300 来源:乙速云 作者:代码code

C++11中的std::function怎么使用

      std::function是C++11标准库中提供的一种可调用对象的通用类型,它可以存储任意可调用对象,如函数指针,函数对象,成员函数指针和lambda表达式。std::function类模板是一个类似于函数指针的类型,但它是可以处理任意可调用对象的,并且可以检查调用对象是否为空。

      一、std::function基本介绍

      基本语法:

      std::function var_name;

      其中,return_type是函数返回值类型,parameter_types是函数参数类型。

      举个例子:

      int func(int x, int y) { return x + y; }
      std::function f = func;
      class A {
      public:
          int mem_func(int x) { return x * x; }
      };
      std::function f2 = &A::mem_func;

      std::function对象可以像普通函数一样调用,并且可以使用bool类型的运算符来检查调用对象是否为空。

      std::function f;
      if (f)
          std::cout << f(1, 2) << std::endl;
      else
          std::cout << "f is empty" << std::endl;

      具体使用例子:

      #include 
      #include 
      void test1(){std::cout<<"function"< fn1 = std::bind(test1);
          std::function fn2 = std::bind(test2, std::placeholders::_1);
          std::function fn3 = std::bind(test3, std::placeholders::_1, std::placeholders::_2);
          std::function fn4 = std::bind(test3, 3, std::placeholders::_1);
          std::function fn5 = std::bind(test3, 3, 4);
          A a;
          std::function fn6 = std::bind(&A::foo, &a, std::placeholders::_1);
          fn1();
          std::cout<

      二、进阶使用方法

      内容来自github,我给大家贴在下面,做个分析。

      2.1 与智能指针相结合

      std::function可以存储智能指针,避免内存泄漏:

      std::function add = std::make_shared([](int a, int b) { return a + b; });

      这段代码定义了一个变量add,它是一个std::function类型,这种类型可以存储一个可调用的函数(可以是函数指针、函数对象、lambda表达式等)。该函数的签名为int(int, int),即返回值类型为int,接受两个int类型参数。变量add被赋值为一个指向匿名函数的指针。这个匿名函数接受两个int类型参数,并返回它们的和。使用std::make_shared来创建该函数的共享指针。

      2.2 存储成员函数指针

      调用类的成员函数:

      class A {
      public:
          int add(int a, int b) { return a + b; }
      };
      std::function add = &A::add;
      A a;
      std::cout << add(a, 3, 4) << std::endl;

      这段代码定义了一个类A,其中有一个名为add的成员函数,该函数接受两个int类型的参数并返回它们的和。然后定义了一个std::function变量add,该变量指向A类的add成员函数。接着创建了一个A类的对象a,最后使用std::cout输出add(a, 3, 4)的结果。

      2.3 存储std::bind

      std::function add3 = std::bind([](int a, int b) { return a + b; }, 3, std::placeholders::_1);
      std::cout << add3(4) << std::endl;

      这段代码定义了一个std::function变量add3,该变量指向一个匿名函数,该函数接受一个int类型的参数并返回它与3的和。 使用std::bind将这个匿名函数绑定到了一个函数上,并且将参数3和占位符_1绑定在这个函数上。最后使用std::cout输出add3(4)的结果。

      三、注意tips

      值得注意!!!std::function有一些限制,如不能存储重载函数等,详见C++标准库文档。

    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>