C++仿函数和typename的用法
1.仿函数的定义是很简单的,就是一个重载了括号()运算符的类,也被称为函数对象。
主要是用于个性化扩展算法对象。stl中实现了好多算法,每个算法都可以完成日常的大部分工作,设计者还允许你在这些强大的算法上再插上别的功能。
怎么插?插的比较泛型和object oriented?这就需要直接把你想添加的功能做参数传给算法对象,于是他们就弄出来个函数对象,让你用起来像函数,但插起来像普通的C++类
比如定义一个仿函数
template <class T>
class functor
{
T operator()(T x){return x+x;}
};
cout<<functor<int>()(2);
好了这就是仿函数。
2.typename
先看问题
template <class T>
class Test
{
typedef T argument_type;
}
template <class T2>
class Test2
{
T2::argument_type*x;
}
Test2<Test> obj;
cout<<obj.x;
Test2模板类有点特别,它实例化的时候模板参数必须要有argument_type这个成员,而且这个arguement_type也比较特别,它是一个类型定义成员,不是用来运算而是用来定义别的变量。按惯例编译器会把T2::argument_type这种写法当作静态成员处理,但是这里如果按照静态成员去解析一个类型定义显然会报错,而且即使编译器考虑到T2::argument_type有可能是个类型定义,那它也无从追溯,对于模板参数T2及其成员,在Test2实例化之前编译器根本不知道这些信息,除非加typename显式声明。
另外,让我们再从编译器的角度看待实例化。
我们认为定义对象是一个实例化的过程,其实编译器得到这样一个指示后并不为对象分配内存,它仍然是为程序的运转做规划,编译后的文件实际上就是一份程序执行方案。何为实例化,答案是we don't care。我们当然是只关注问题的解决,而不是概念本身。
转载于:https://www.cnblogs.com/sky-view/p/3246652.html
C++仿函数和typename的用法相关推荐
- 模板类中 typename的用法,以及函数的定义和声明
typename 的用法: 第一种 template<typename T> 这种大家都知道, 和 template<class T> 一样,就不多讲解了 第二种: 嵌套从属名 ...
- C++中typename的用法
1.typename的常规用法 typename在C++类模板或者函数模板中经常使用的关键字,此时作用和class相同,只是定义模板参数: 2.typename的第二个用法:修饰类型 template ...
- typedef 与 typename 的用法
一.typedef:类型说明 类型说明的格式为: typedef 类型 新定义名: 类型说明只定义指定的一个类型的新名字,并不是定义一种新的数据类型. eg: typedef int INT; 这样声 ...
- 关键字typename的用法
变量类型定义 C++在泛型编程中是和class类似的用法 template <typename T> inline T GetMax(T m, T n) { return m > n ...
- typename 的用法
Usage typename 主要有两个作用,让我们先来看看参考手册对该关键字的说明. In the template parameter list of a template declaration ...
- typename关键字用法
阅读某开源代码,利用模板特新创建一个指针池时,对下面的两行代码产生了困惑 template<typename T> class NetPointerPool { public: typed ...
- C++ typename 的双重含义
1.模板类型参数申明 使用模板时,在申明模板类型参数时,我们经常有如下两种申明方式: // 方式一 template <class T> CTest;// 方式二 template < ...
- c++中的typename与class
在泛型编程的形参表中,关键字typename和class具有相同的含义,可以相互使用,两个关键字都可以在同一模板形参表中使用: 1. typename用在模板定义里,标明其后的模板参数是类型参数. ...
- C++ sizeof用法总结
sizeof sizeof操作符的作用是返回一个对象或类型名的长度,长度的单位是字节. 返回值的类型是标准库命名为size_t的类型,size_t类型定义在cstddef头文件中,该头文件是C标 ...
- C++ sizeof用法
sizeof操作符的作用是返回一个对象或类型名的长度,长度的单位是字节. 返回值的类型是标准库命名为size_t的类型,size_t类型定义在cstddef头文件中,该头文件是C标准库的头文件stdd ...
最新文章
- 【Flutter】开发 Flutter 包和插件 ( 开发 Dart 插件包 | 发布 Dart 插件包 )
- Spring4新特性——Web开发的增强
- SQL update select结合语句详解及应用
- CentOS Linux 7.7 安装kafka zookeeper
- PHP的rm指令,git rm 命令
- java 手写 jvm高性能缓存
- 16F877A和24C02通信汇编语言,PIC16f877A读写24c02程序
- SSH如何通过公钥连接云服务器
- linux添加ipv6默认路由表,IPv6及静态路由配置
- PL/SQL 快捷键设置
- OpenCV读取网络摄像头视频并保存到本地
- fastjson list转json
- 实验二 预测分析算法的设计与实现
- 如何卸载Adobe Premiere Pro CC 2017和Adobe Photoshop CC 2018
- 通过--amend和rebase修改git commit提交的注释信息
- 如何重装oracle数据库,oracle数据库的重装
- 世界上还是好人多啊!
- 使用webp进行图像压缩
- webm转换mp4最简单方法?
- C#中,System.ComponentModel.Container详解
热门文章
- 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_04.mybatis概述
- git error: failed to push some refs to...
- 关闭jtag保留swd
- IOS音频1:之采用四种方式播放音频文件(一)AudioToolbox AVFoundation OpenAL AUDIO QUEUE...
- 我的大学生活-4-21-吕家尧
- [Node.js]001.安装与环境配置
- 支持向量机很全的代码和数据集
- Linux下Openssl的安装
- Sql Sever 注册服务器 [SQL Server]
- vue中使用echarts