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' ...
随机推荐
- 【THUSC2017】巧克力
题目描述 “人生就像一盒巧克力,你永远不知道吃到的下一块是什么味道.” 明明收到了一大块巧克力,里面有若干小块,排成n行m列.每一小块都有自己特别的图案ci,j,它们有的是海星,有的是贝壳,有的 ...
- 【agc001d】Arrays and Palindrome
Portal -->agc001D Description 给你一个\(m\)个数的排列\(A\),这个\(A\)中元素的顺序可以随便调换,\(A\)中的元素的和为\(n\),现在要你构造一个数 ...
- 3:JavaBean,EJB,POJO
JavaBeanJavaBean是公共Java类,但是为了编辑工具识别,需要满足至少三个条件: 有一个public默认构造器(例如无参构造器,) 属性使用public 的get,set方法访问,也就是 ...
- c++ 容器弊端
1.stack 不能直接清空,要 while (!s.empty()) s.pop(); 2.vector 增添.删除数据,也许vector首尾的地址会发生改变 如: ( watch f.begin( ...
- 深度学习网络层之 Pooling
pooling 是仿照人的视觉系统进行降维(降采样),用更高层的抽象表示图像特征,这一部分内容从Hubel&wiesel视觉神经研究到Fukushima提出,再到LeCun的LeNet5首次采 ...
- GO_10:GO语言基础之error
Go错误处理 Go 语言通过内置的错误接口提供了非常简单的错误处理机制. error类型是一个接口类型,这是它的定义: type error interface { Error() string } ...
- 2017年Java面试题整理
原文出处:CSDN邓帅 面试是我们每个人都要经历的事情,大部分人且不止一次,这里给大家总结最新的2016年面试题,让大家在找工作时候能够事半功倍. 1.Switch能否用string做参数? a.在 ...
- jmeter上传图片附件-小插曲
背景 最近,接到新项目的接口测试,发现该接口是需要上传图片,开始折腾了好久没有搞定,最后才发现st和sid,并不是作为请求实体,而是url的一部分,好吧,是我没有仔细 请求参数 { "con ...
- httpclient4.5 连接池的封装
随着微服务的流行,服务之间的http调用越来越多,遇到的问题也比较多,写这边文章的目的也是将自己遇到的坑和解决方案跟大家分享 一.为什么要用Http连接池 1.降低延迟:如果不采用连接池,每次连接发起 ...
- Machine Learning Trick of the Day (2): Gaussian Integral Trick
Machine Learning Trick of the Day (2): Gaussian Integral Trick Today's trick, the Gaussian integral ...