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' ...
随机推荐
- MVC中使用RadioButtonFor
http://shw3588.blog.163.com/blog/static/6507576201321395845538/ 1 进行初始化 <%=Html.RadioButtonFor(mo ...
- 火狐,discuz同步登录问题解决
<script type="text/javascript" src="http://******/uc/api/uc.php?time=1503386589&am ...
- python 字符串切片知识巩固
切片操作(slice)可以从一个字符串中获取子字符串(字符串的一部分).我们使用一对方括号.起始偏移量start.终止偏移量end 以及可选的步长step 来定义一个分片. 格式: [start:en ...
- shell实例浅谈之一产生随机数七种方法
一.问题 Shell下有时需要使用随机数,在此总结产生随机数的方法.计算机产生的的只是“伪随机数”,不会产生绝对的随机数(是一种理想随机数).伪随机数在大量重现时也并不一定保持唯一,但一个好的伪随机产 ...
- Tomcat权威指南-读书摘要系列2
2. 配置Tomcat 2.1. 重定向Web应用程序的目录 将工程文件与Tomcat分离 复制conf和webapps文件夹到分离目录: 配置CATALINA_BASE环境变量,值为分离目录: 2. ...
- 关于JSON的解析方式
借鉴:站在巨人的肩膀上 一.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,在Json.org网站上,Java可以使用 ...
- Shell记录-Shell脚本基础(二)
Shell 基本运算符 算术运算符: 运算符 描述 例子 + Addition - Adds values on either side of the operator `expr $a + $b` ...
- bzoj千题计划166:bzoj2179: FFT快速傅立叶
http://www.lydsy.com/JudgeOnline/problem.php?id=2179 FFT做高精乘 #include<cmath> #include<cstdi ...
- 高维数据降维 国家自然科学基金项目 2009-2013 NSFC Dimensionality Reduction
2013 基于数据降维和压缩感知的图像哈希理论与方法 唐振军 广西师范大学 多元时间序列数据挖掘中的特征表示和相似性度量方法研究 李海林 华侨大学 基于标签和多特征融合的图像语义空间学习技 ...
- 部署elasticsearch遇到的问题
为增加搜索功能,最近在自己的服务器上部署elasticsearch,折腾一下,把注意的问题记录一下. 1. 因为最近的es5.5.2要求java1.8,所以确保java版本正确. 2. 我的服务器只 ...