C++之可调用对象
C++中的可调用对象分为以下几种:
- 函数
- 函数指针
- lambda表达式
- bind创建的对象
- 重载了函数调用运算符(即“()”)的类
函数、函数指针不再介绍。lambda表达式与bind创建的类参考——lambda表达式和bind函数。
/*** 重载了函数调用运算符的类*/classSizeComp{public:SizeComp(std::size_t sz): size(sz){}voidoperator()(const string & str)const{if(str.size()>= size){cout << str << endl;}}private:std::size_t size;};
void testInvoke2nd(){vector<string> strVec ={"1","12","123","1234","12345","123456","1234567"};std::size_t sz =5;cout <<"lambda表达式:"<< endl;auto comp =[sz](const string & str)->void{if(str.size()>= sz){cout << str << endl;}};for_each(strVec.begin(), strVec.end(), comp);cout <<"()运算符重载:"<< endl;for_each(strVec.begin(), strVec.end(),SizeComp(sz)); // 先是调用构造函数创建一个临时对象}
#include<iostream>#include<functional>#include<map>usingnamespace std;/**< 可调用对象——函数 *//*** 若进行函数重载则不能直接使用函数名* 会产生二义性* 此时考虑函数指针或其他的实现方式*///implements "+" operationconstint addInt(constint x,constint y){return x + y;}/**< 可调用对象——重载了调用运算符的类 *///implements "-" operationstruct minusInt{constintoperator()(constint x,constint y){return x - y;}};//函数指针所指向的函数constint dividesFunc(constint x,constint y){return x / y;}void testFunction(){/**< 可调用对象——lambda表达式 *///implements "*" operationauto multipInt =[](constint x,constint y)->constint{return x * y;};/**< 可调用对象——函数指针 *///implements "/" operationconstint(*dividesInt)(int,int)= dividesFunc;// dividesInt = multipInt; // 说明lambda是一个函数对象/*** function<int(int, int)>的原型是function<T>* @brief 存储可调用对象(该对象的调用形式应该与T相同)* @param T 函数类型(返回值类型,参数个数及)*/map<string, function<int(int,int)>> binops ={{"+", addInt},/* 函数名默认转化为函数指针类型 */{"-", minusInt()},/* 创建一个类对象 */{"*", multipInt},/* lambda表达式类型的对象 */{"/", dividesInt}/* 函数指针 */};cout << binops["+"](10,5)<< endl<< binops["-"](10,5)<< endl<< binops["*"](10,5)<< endl<< binops["/"](10,5)<< endl;}int main(){testFunction();return0;}
C++之可调用对象的更多相关文章
- C/C++: C++可调用对象详解
C++中有几种可调用对象:函数,函数指针,lambda表达式,bind创建的对象,以及重载了函数调用符的类. 1. 函数 函数偏基础的东西,在这里不再叙述.重点讲下C++11的某些重要特性和函数指针. ...
- Oracle自定义数据类型 2 (调用对象方法)
调用对象方法 调用对象方法基于类型创建表后,就可以在查询中调用对象方法 A. 创建基于对象的表语法: create table <表名> of <对象类型>意义 ...
- Delphi 中的DLL 封装和调用对象技术(刘艺,有截图)
Delphi 中的DLL 封装和调用对象技术本文刊登2003 年10 月份出版的Dr.Dobb's 软件研发第3 期刘 艺摘 要DLL 是一种应用最为广泛的动态链接技术但是由于在DLL 中封装和调用对 ...
- C++中的各种可调用对象
概述 一组执行任务的语句都可以视为一个函数,一个可调用对象.在程序设计的过程中,我们习惯于把那些具有复用性的一组语句抽象为函数,把变化的部分抽象为函数的参数. 函数的使用能够极大的极少代码重复率,提高 ...
- .Net 之 RPC 框架之Hprose(远程调用对象)
实现远程调用对象,跨进程访问对象,可实现分布式 首先给服务端和客户端 nuget Hprose 可使用tcp和http两种调用方式 服务端 using Hprose.Server; using Sys ...
- Python中的7种可调用对象
Python中有七种可调用对象,可调用对象可使用内置函数callable来检测 一.用户自定义的函数: 使用def语句或者lambda表达式创建的函数. 二.内置函数: 使用C语言实现的函数,如len ...
- python 可调用对象之类实例
可调用对象,即任何可以通过函数操作符()来调用的对象. python可调用对象大致可以分为4类: 1.函数 python中有三种函数:内建函数(BIFs).用户自定义函数(UDF).lambda表达式 ...
- 第12课 std::bind和std::function(3)_std::function可调用对象包装器
1. std::function (1)首先是一个类模板,用于包装可调用对象.可以容纳除了类成员(函数)指针之外的所有可调用对象. (2)可以将普通函数,lambda表达式和函数对象类统一起来.尽管它 ...
- 第10课 std::bind和std::function(1)_可调用对象
1. 几种可调用对象(Callable Objects) (1)普通函数指针或类成员的函数指针 (2)具有operator()成员函数的类对象(仿函数).如c++11中的std::function类模 ...
- python在交互模式下直接输入对象后回车,调用的是对象的__repr__()方法,这个方法表示的是一个编码,用print+对象是调用对象的__str__方法
交互模式下调用对象的__repr__()方法,这个方法表示的是一个编码 >>> u"国庆节快乐"u'\u56fd\u5e86\u8282\u5feb\u4e50' ...
随机推荐
- 【bzoj2754】【scoi2012】喵星球上的点名
题解们: 1.首先可以被很多暴力给搞过去:我以前也是这样水过去的 2.ac自动机 2.1 抽离fail树 对点名建自动机,建$fail$树的时候只保留询问节点: 对于一个喵,子串==在自动机里匹配到的 ...
- Laravel 限流中间件 throttle 简析
1. 在Laravel 中配置 在 app\Http\Kernel.php 中,默认添加到中间件组 api 下,1分钟60次. 2. 限流原理 获取唯一请求来源,进行唯一标识(key) 获取该请求请求 ...
- python3 安装MySQLdb及无法打开mysql.h问题解决(win7 )
在Flask中要连接mysql数据库,需要安装flask-mysqldb. pip install flask-mysqldb 用pip安装MySQLdb 中遇到如下问题,折腾半天之久,多方尝试,终搞 ...
- grep与正则表达式详解和实例
转载自:http://www.jb51.net/article/31207.htm grep 工具,以前介绍过. grep -[acinv] '搜索内容串' filename -a 以文本文件方式搜索 ...
- vue 打印页面部分区域
1. vue项目打印页面部分区域 2. 原生js实现页面局部打印功能 3. vue项目中将table组件导出Excel表格以及打印页面内容
- mysql 复制表数据,表结构的3种方法
什么时候我们会用到复制表?例如:我现在对一张表进行操作,但是怕误删数据,所以在同一个数据库中建一个表结构一样,表数据也一样的表,以作备份.如果用mysqldump比较麻烦,备份.MYD,.MYI这样的 ...
- How to Tell Science Stories with Maps
Reported Features How to Tell Science Stories with Maps August 25, 2015 Greg Miller This map, part ...
- 八、Kafka总结
一 Kafka概述 1.1 Kafka是什么 在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算. 1)Apache Kafka是一个开源消息系统,由Scala写成. ...
- Linux学习2-fork
复制进程映像 fork() 要想让进程同时执行多个函数,我们可以使用线程或从源程序中创建一个完全分离的进程,后者就像init的做法一样,而不像exec调用那样用新程序替换当前指向的线程. 我们可以通过 ...
- LintCode 412: Candy
LintCode 412: Candy 题目描述 有 N 个小孩站成一列.每个小孩有一个评级. 按照以下要求,给小孩分糖果: 每个小孩至少得到一颗糖果. 评级越高的小孩可以得到更多的糖果. 需最少准备 ...