std::function 是一个模板类,用于封装各种类似于函数这样的对象,例如普通函数,仿函数,匿名函数等等。其强大的多态能力,让其使用只依赖于调用特征。在程序的升级中,可以实现一个调用表,以兼容新旧不同的实现方式。

例如:

 #include <iostream>
#include <functional>
#include <list> using namespace std; //普通函数
int c_fun_add(int a, int b)
{
return a + b;
} //模板函数
template <typename T>
T t_fun_add(T a, T b)
{
return a + b;
} //仿函数
class functor_add
{
public:
int operator()(int a, int b)
{
return a + b;
}
}; //匿名函数,lambda表达式
auto l_fun_add = [](int a, int b)
{
return a + b;
}; //成员函数
class FunClass
{
public:
static int s_fun_add(int a, int b)
{
return a + b;
} int n_fun_add(int a, int b)
{
return a + b;
}
}; int _tmain(int argc, _TCHAR* argv[])
{
functor_add functor;
FunClass funcls;
std::list<std::function<int(int, int)>> call_tables;
call_tables.push_back(c_fun_add);
call_tables.push_back(t_fun_add<int>);
call_tables.push_back(functor);
call_tables.push_back(l_fun_add);
call_tables.push_back(funcls.s_fun_add);
call_tables.push_back(bind(&FunClass::n_fun_add, &funcls, placeholders::_1, placeholders::_2)); for (const auto& fun : call_tables)
{
cout << fun(, ) << endl;
}
getchar();
return ;
}

c++ std::function的更多相关文章

  1. C++11中的std::function

    看看这段代码 先来看看下面这两行代码: std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed; std::fun ...

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

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

  3. typedef 函数指针 数组 std::function

    1.整型指针 typedef int* PINT;或typedef int *PINT; 2.结构体 typedef struct { double data;}DATA,  *PDATA;  //D ...

  4. callable object与新增的function相关 C++11中万能的可调用类型声明std::function<...>

    在c++11中,一个callable object(可调用对象)可以是函数指针.lambda表达式.重载()的某类对象.bind包裹的某对象等等,有时需要统一管理一些这几类对象,新增的function ...

  5. std::bind和std::function

    std::bind 用于绑定一个函数,返回另外一种调用方式的函数对象 ,可以改变参数顺序 和个数,特别是在多线程的程序中,经常用它将函数进行包装,然后打包发送给工作线程,让工作线程去执行我们的任务. ...

  6. std::function,std::bind

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

  7. C++11 std::function用法

    转自 http://www.hankcs.com/program/cpp/c11-std-function-usage.html function可以将普通函数,lambda表达式和函数对象类统一起来 ...

  8. 【转】C++11中的std::function

    原文地址:http://www.jellythink.com/archives/771 看看这段代码 先来看看下面这两行代码: std::function<void(EventKeyboard: ...

  9. std::function,std::bind复习

    #include <iostream> #include <functional>//std::bind返回函数对象 void fun1(int a, int b) { std ...

  10. C++中的仿函数,std::function和bind()的用法

    1.仿函数:又叫std::function,是C++中的一个模板类 2.C语言中的函数指针: int  add(int a,int b) { return a+b; } typedef int (*f ...

随机推荐

  1. Android Des加密解密

    算法转自:http://www.linuxidc.com/Linux/2011-08/41866.htm import java.security.Key; import java.security. ...

  2. day33

    今日内容: 1.关于UDP传输的模拟实现 2.使用socketserver模块实现TCP传输的并发操作 3.进程理论的介绍 1.关于UDP传输的模拟实现 模拟UDP传输与之前的模拟TCP传输大致相同 ...

  3. 20155210 Exp7 网络欺诈防范

    Exp7 网络欺诈防范 SET工具建立冒名网站 首先利用lsof -i:80或者netstat -tupln |grep 80查询80端口的使用情况(我的电脑80端口没有被占用,如果被占用,则用kil ...

  4. PHP和PHPINFO

    PHP开放源码和跨越平台,PHP可以运行在WINDOWS和多种版本的LINUX上.它不需要任何预先处理而快速反馈结果,它也不需要mod_perl的调整来使您的服务器的内存映象减小.PHP消耗的资源较少 ...

  5. 20155338《网络对抗》 Exp4 恶意代码分析

    20155338<网络对抗>恶意代码分析 实验过程 1.计划任务监控 在C盘根目录下建立一个netstatlog.bat文件(先把后缀设为txt,保存好内容后记得把后缀改为bat),内容如 ...

  6. VS编程,WPF中,获取鼠标相对于当前屏幕坐标的一种方法

    原文:VS编程,WPF中,获取鼠标相对于当前屏幕坐标的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/det ...

  7. [CF587F]Duff is Mad[AC自动机+根号分治+分块]

    题意 给你 \(n\) 个串 \(s_{1\cdots n}\) ,每次询问给出 \(l,r,k\) ,问在 \(s_{l\cdots r}\) 中出现了多少次 \(s_k\) . \(n,q,\su ...

  8. Asp.Net_Mvc3.5语法_<%%>的用法

    一. <%%>这种格式实际上就是和asp的用法一样的,只是asp中里面是vbscript或 者javascript代码,而在asp.net中用的是.net平台下支持的语言.特别 注意:服务 ...

  9. 使用Fidder从安卓模拟器获取APP内H5游戏网址

    大家都知道H5游戏其实是网页,但是有些APP或者微端不显示网址链接.这里给大家介绍介绍一种,利用Fiddler进行抓包,获取APP打开的网址的方法.有人说何必多此一举呢,直接用模拟器玩游戏就好了.的确 ...

  10. 英特尔帮助优化 Epic 的《堡垒之夜》* 和 Unreal Engine*

    您可能知道,Epic 的游戏<堡垒之夜>是 Unreal Engine* 技术的绝佳示例,<堡垒之夜>的开发团队正不断改进游戏,增加支持平台的数量并将信息反馈给引擎.为此,英特 ...