c++11:function的用法

function是函数、函数对象、函数指针、和成员函数的包装器,可以容纳任何类型的函数对象,函数指针,引用函数,成员函数的指针

普通函数

#include <functional>
void print_num(int i)
{
    cout << "i" << endl;
}

function<void(int)> f_display = print_num;
f_display(-9);

function<void()> f_display_42 = [](){ print_num(42); };
f_display_42();

function<void()> f_display_32337 = bind(print_num, 32337); //对bind不明白参考bind
f_display_32337();

类成员函数

#include <functional>
stuct Foo {
   Foo(int num) : num_(num) {}
   void print_add(int i) const { cout << num_ + i << endl;}
   int num_;
};

function<void(const Foo&, int)> f_add_display = &Foo::print_add;
const Foo foo(314159);
f_add_display(foo, 1);

function<void(int)> f_add_display2 = bind(&Foo::print_add, foo, placeholders::_1);
f_add_display2(2);

一个实际的应用:

  1 #include <functional>
  2 #include <iostream>
  3
  4 using namespace std;
  5
  6 class Scope {
  7 public:
  8     explicit Scope(function<void()> o) :
  9         on_exit_(o) {}
 10     ~Scope() { on_exit_(); }
 11 private:
 12     function<void()> on_exit_;
 13 };
 14
 15 int main()
 16 {
 17     Scope scope([]() { cout << "close" << endl; });
 18 }

输出结果: close

时间: 2024-10-14 00:09:49

c++11:function的用法的相关文章

C++11 function函数用法

// C++11 function #include <functional> void print_num(int i) { std::cout << i << '\n'; } void testFunctionTpl() { // templet 匿名函数 std::function<void(const int&, const int&)>getSum = [&](const int &nI1, const int &a

function object用法

1 // Generic findMax, with a function object, version #1 2 // Precondition, a.size() > 0 3 #include <iostream> 4 #include <vector> 5 #include <string.h> 6 using namespace std; 7 8 template <class Object, class Comparator> 9 cons

js中,(function(){})()的用法解析

(function($){...})(jQuery)  含义 经常用,今天总结一下,下文摘自某网友的总结: (function($){...})(jQuery)实际上是匿名函数,不懂得朋友可以继续往下看. 这里实际上是匿名函数 function(arg){...} 这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写上括号和实参的,由于操作符的优先级,函数本身也需要用括号,即: (function(arg){...})(param) 这就相当于定义了一个参数为arg的匿名函数,并且

c/c++ 重载运算符 标准库function的用法

重载运算符 标准库function的用法 问题:int(int, int)算不算一种比较通用的类型?? 比如函数: int add(int a, int b); 比如lambda:auto mod = [](int a, int b){return a % b}; 比如函数对象类:int operator()(int a, int b); 上面3个的共同特征就是:int(int, int),但是如何让上面的3种形式变成共同的的呢??? 答案:使用function类. std::function<

python3新特性函数注释Function Annotations用法分析

本文分析了python3新特性函数注释Function Annotations用法.分享给大家供大家参考,具体如下: Python 3.X新增加了一个特性(Feature),叫作函数注释 Function Annotations 它的用途虽然不是语法级别的硬性要求,但是顾名思义,它可做为函数额外的注释来用. Python中普通的函数定义如下: def func(a,b): return a+b print(func(1, 2)) #3 添加了函数注释的函数会变成如下形式 def func(a:

C++11 function用法 可调用对象模板类

std::function<datatype()> ()内写参数类型 datatype 代表function的返回值 灵活的用法.. 代码如下 1 #include <stdio.h> 2 #include <iostream> 3 #include <map> 4 #include <functional> 5 #include <stdlib.h> 6 using namespace std; 7 8 // 普通函数 9 int

C++11 function

#include <iostream> #include <functional> #include <vector> using namespace std; // c type global function int c_func(int a, int b) { return a + b; } //function object class functor { public: int operator() (int a, int b) { return a + b;

(11) lambda表达式用法

* lambda 简述    lambda只是一个表达式,函数体比def简单很多    lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去.    lambda表达式是起到一个函数速写的作用.允许在代码内嵌入一个函数的定义    lambda可以有多个参数列表    lambda表达式也叫匿名函数    * 简单例子   result = lambda x:x+3   求一个数加3的结果      fun = lambda x,y:x*y   求两个

$(function(){})和$(document).ready(function(){}) 的用法

当文档载入完毕就执行,以下几种效果是等价的:1. $(function(){ //这个就是jQuery ready()的简写,即下2的简写 // do something }); 2. $(document).ready(function(){ //do something }) 3. $().ready(function(){ //默认参数是:document //do something }) document.ready和onload的区别——JavaScript文档加载完成事件 页面加载