转自:https://blog.csdn.net/shuilan0066/article/details/82788954

示例1 : 普通函数
void gFunc()
{
    cout << "gFunc" << endl;
}
int main()
{
    std::function<void()> f = gFunc;
    f();
    getchar();
    return 0;
}

示例2 模板函数

template <class T>
T g_Add(T i, T j)
{
  cout << i + j;
  return i + j;
} int main()
{
  std::function<int(int,int)> f = g_Add<int>;
  f(,);   getchar();
  return ;
}
示例三: 匿名函数

auto g_Lambda = [](int i, int j)
{
  return i + j;
}; //匿名函数 此处有分号 int main()
{
  std::function<int(int, int)> f = g_Lambda;
  cout<<f(,);   getchar();
  return ;
}
示例四:函数对象

/函数对象
struct Add
{
  int operator()(int i, int j)
  {
    return i + j;
  }
}; //模板函数对象
template <class T>
struct AddT
{
  T operator()(T i, T j)
  {
    return i + j;
  }
}; int main()
{
  std::function<int(int, int)> f = Add();
  cout<<f(,)<<endl;   std::function<int(int, int)> ft = AddT<int>();
  cout << ft(, )<<endl;   getchar();
  return ;
}
示例5:类成员函数

class Computer
{
  public:
  static int Add(int i, int j)
  {
    return i + j;
  }   template<class T>
  static T AddT(T i, T j)
  {
    return i + j;
  }   int AddN(int i, int j)
  {
    return i + j;
  }
}; //存储对成员函数的调用 int main()
{
  //1、 类静态函数
  std::function<int(int, int)> f = &Computer::Add;
  cout << f(, ) << endl;   //2、 类静态模板函数
  std::function<int(int, int)> ft = &Computer::AddT<int>;
  cout << ft(, ) << endl;   //普通函数绑定 需要构造类对象
  Computer c;   //3、 普通函数 需使用bind,将类对象地址 &c 绑定上
  std::function<int(int, int)> fN = std::bind(&Computer::AddN, &c, placeholders::_1, placeholders::_2);
  cout << fN(, ) << endl;   //4、普通函数, 也可以这样调用 个人觉得这个比 bind 麻烦,不建议
  std::function <int(const Computer &, int, int)> fN2 = &Computer::AddN;
  cout << fN2(c,, ) << endl;   getchar();
  return ;
}

std::function以及std::bind的更多相关文章

  1. std::function,std::bind

    std::function 和 std::bind 标准库函数bind()和function()定义于头文件中(该头文件还包括许多其他函数对象),用于处理函数及函数参数.bind()接受一个函数(或者 ...

  2. C++ 中std::function 、std::bind的使用和lambda的使用

    std::function是可调用对象的包装器:std::bind是将可点用对象和其参数一起进行绑定,且绑定后的结果可以使用std::function对象进行保存,并延迟调用到需要调用的时候: 在C+ ...

  3. C++11 std::function、std::bind和lambda表达式

    参考博客: C++可调用对象详解-https://www.cnblogs.com/Philip-Tell-Truth/p/5814213.html 一.关于std::function与std::bin ...

  4. C++11新特性应用--实现延时求值(std::function和std::bind)

    说是延时求值,注意还是想搞一搞std::function和std::bind. 之前博客<C++11新特性之std::function>注意是std::function怎样实现回调函数. ...

  5. c++11 符号修饰与函数签名、函数指针、匿名函数、仿函数、std::function与std::bind

    一.符号修饰与函数签名 1.符号修饰 编译器将c++源代码编译成目标文件时,用函数签名的信息对函数名进行改编,形成修饰名.GCC的C++符号修饰方法如下: 1)所有符号都以_z开头 2)名字空间的名字 ...

  6. C++11之std::function和std::bind

    std::function是可调用对象的包装器,它最重要的功能是实现延时调用: #include "stdafx.h" #include<iostream>// std ...

  7. std::function与std::bind 函数指针

    function模板类和bind模板函数,使用它们可以实现类似函数指针的功能,但却却比函数指针更加灵活,特别是函数指向类 的非静态成员函数时. std::function可以绑定到全局函数/类静态成员 ...

  8. 转 C++11之std::function和std::bind

    std::function是可调用对象的包装器,它最重要的功能是实现延时调用: #include "stdafx.h" #include<iostream>// std ...

  9. 【浅析C++11】std::function和std::bind

    目录 std::function可调用对象包装器 std::function基本用法 std::function/std::bind与抽象工厂.工厂方法的一点思考 std::function可调用对象 ...

随机推荐

  1. LightOJ - 1214-Large Division(数学,同余)

    链接: https://vjudge.net/problem/LightOJ-1214 题意: Given two integers, a and b, you should check whethe ...

  2. flask实现文件下载功能

    在Flask想要实现文件下载功能,只需要导入 send_from_directory(directory, filename, **options) 然后在视图函数中返回该函数即可 示例代码如下 fr ...

  3. UWB DWM1000 开源项目框架

    UWB 目前比较火热,不论国内还是国外目前都掀起一股热潮. 但是实际工程代码很少,开源代码更少. 目前代码主要有 1 DecaWave Release的定位源码,代码基于TWR,一个非常大的状态机. ...

  4. javascript/Jquery 将字符串转换成变量名

    var a = ['a', 'b', 'c'] var obj = {} for(i = 0; i < a.length; i++){ obj[a[i]] = "abc" + ...

  5. 【安卓周记】笔记复习记录:No.1

    [安卓] 1. 安装APK记得考虑兼容7.0,Uri不能直接从Uri.parse()中构建,要使用FileProvider构建Uri. <provider android:name=" ...

  6. html5文件夹上传源码

    前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...

  7. NetworkX系列教程(10)-算法之四:拓扑排序与最大流问题

    小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ...

  8. opencv 学习一安装环境vs2015+opencv3

    参考博客 http://www.cnblogs.com/skyfsm/p/6840202.html 针对 模块计算机类型“X64”与目标计算机类型“X86”这个问题,我使用cmake 对环境的工程进行 ...

  9. Java 【打印俄文的英文字母】

    俄文的的字符可以用 'A' 到 'Я '. public class main { public static void main(String args[]) { char S = 'А', C = ...

  10. 基于JSON的接口测试框架

    更多学习资料请加QQ群: 822601020获取 实现效果 需求场景: 公司微服务接口使用数字签名的方式, 使用Postman调试接口每次都需要修改源码将验签临时关闭, 但是关闭后,其他微服务不能正常 ...