std::function
来源:互联网 发布:2015年出境游数据 编辑:程序博客网 时间:2024/05/22 06:19
std::function可以将普通函数,lambda表达式和函数对象类统一起来。它们并不是相同的类型,然而通过function模板类,可以转化为相同类型的对象(function对象),从而放入一个map里。
<pre class="cpp" name="code">#include "stdafx.h"#include <iostream>#include <map>#include <functional>using namespace std;// 普通函数int add(int i, int j) { return i + j; }// lambda表达式auto mod = [](int i, int j){return i % j; };// 函数对象类struct divide{ int operator() (int denominator, int divisor) { return denominator / divisor; }}; int _tmain(int argc, _TCHAR* argv[]){ // 受限的map map<char, int(*)(int, int)> binops_limit; binops_limit.insert({ '+', add }); binops_limit.insert({ '%', mod }); // 错误 1 error C2664: “void std::_Tree<std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,false>>::insert(std::initializer_list<std::pair<const _Kty,_Ty>>)”: 无法将参数 1 从“initializer-list”转换为“std::pair<const _Kty,_Ty> &&” // binops_limit.insert({ '%', divide() }); // binops_limit.insert({ '-', minus<int>() });// 更灵活的map map<char, function<int(int, int)>> binops = { { '+', add }, { '-', minus<int>() }, { '*', [](int i, int j){return i*j; } }, { '/', divide() }, { '%', mod }, }; cout << binops['+'](10, 5) << endl; cout << binops['-'](10, 5) << endl; cout << binops['*'](10, 5) << endl; cout << binops['/'](10, 5) << endl; cout << binops['%'](9, 5) << endl; system("pause"); return 0;}
如上所示,function可以将普通函数,lambda表达式和函数对象类统一起来。它们并不是相同的类型,然而通过function模板类,可以转化为相同类型的对象(function对象),从而放入一个map里。
0 0
- STD::FUNCTION
- std::function
- std::function
- std::function
- std::function
- std::function
- std::function
- std::function
- std::function
- std::function std::bind
- std::function std::bind
- std::function 和 std::bind
- lambda, std::function, std::bind
- 笔记-std::function<> && std::bind()
- std::function 和 std::bind
- std::bind与std::function
- std::function std::bind理解
- std::bind std::function 用法
- css vertical-align属性详解
- 【DP】poj1458
- iOS Crash 分析(文一)- 开始
- 字符串中sizeof和strlen的区别,以及'\0'与NULL的区别
- GridView详解
- std::function
- 单纯地“世故”——laugh off & see through
- 详细分析Hibernate的merge()方法
- 天梯匹配算法的思路
- 第3章40题
- iOS Crash 分析(文二)-崩溃日志组成
- 鼠标事件-鼠标位置和鼠标滚轮
- TypeError: 'module' object is not callable 原因分析
- Tomcat