模板类中 typename的用法,以及函数的定义和声明
typename 的用法:
- 第一种
template<typename T> 这种大家都知道, 和 template<class T> 一样,就不多讲解了
- 第二种: 嵌套从属名称
注意代码中的erase() 和 print() 以及 typedef list<T*> data_type
template<class T>
class List
{private:typedef list<T*> data_type;data_type _list;
public://List(){}//explicit List(std::initializer_list<T*>object) { _list = object; }//void push(T *obj) { _list.push_back(obj); }void erase(){typename data_type::iterator T_begin = _list.begin();while(T_begin != _list.end()){if(*T_begin)delete *T_begin;T_begin++;}}//const data_type &data() {return _list;}void print(){typename data_type::iterator T_begin = _list.begin();while(T_begin != _list.end()){std::cout<<**T_begin<<std::endl;T_begin++;}}
};
print() 函数中 T_begin 的类型是 data_type::iterator 实际上他的类型取决于typedef list<T*> data_type 也就是模板参数T.
template 内出现的名称如果相依 某个 template 的参数称之为 从属名称.
如果从属名称在class 中呈 嵌套状, 就称为 嵌套从属名称
嵌套从属名称可能导致解析困难
在Effective c++ 书中 条款42: P203 有讲解
void print(){data_type::iterator *T_begin;}
这其实是想表示一个指针, 因为代码是你写的,你自然知道, 别人可能会以为是相乘的动作.
要改正这个错误,我门必须告知c++ data_type::iterator 是一个类型, 那末只要在他的前面 放置 typename 就可以了
关于模板函数的定义和声明:
最好是放在.h , 放在一起
参考文档: https://www.cnblogs.com/coder-zyc/p/10030551.html
参考文档: https://blog.csdn.net/u010273652/article/details/21568131
参考文档: https://www.nowcoder.com/questionTerminal/7ffeb7a8e2ef43dcaf6ee4cb69f17bf3?page=1&onlyReference=false
模板类中 typename的用法,以及函数的定义和声明相关推荐
- C++类与对象(类中的六大默认成员函数)
文章目录 类的默认成员函数 构造函数 概念 特征 自己定义构造函数 类中编写 传参方法 编译器自动生成的构造函数 定义变量方式 初始化规则 析构函数 概念 特性 自己定义析构函数 编译器自动生成的析构 ...
- 模板编程中typename用法
模板编程中typename用法 文章目录 模板编程中typename用法 typename的常规用法 typename的第二个用法:修饰类型 typename使用规则 typename的常规用法 ty ...
- 模板类中使用友元函数的方式,派生类友元函数对基类的成员使用情况
在一般友元函数的前面加上 template<typename T),注意在函数的声明和定义处都要加这个模板 例如: //模板类,长方体类 template <typename Elemen ...
- python 函数参数self_Python类中self参数用法详解
Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上.后来对Python渐渐熟悉了一点,再回头看self的概念,似乎有点弄明白了. 首先明确的是s ...
- C++中模板类中的成员函数以及模板函数在类外定义
在C++中,类中的成员函数可以在类外完成定义,从而显得类中的成员函数看起来简洁明了.但是模板类里的成员函数和模板函数与普通的成员函数在类外定义不同. 先定义一个模板类以及成员函数和模板函数: 接下我们 ...
- C++模板类中使用静态成员变量(例如Singleton模式)
一个最简单Singleton的例子: / Test.h / template <class _T> class CTest { private: _T n; static CTest< ...
- oracle中类似indexof用法_instr函数
oracle中类似indexof用法_instr函数 [sql] 在oracle中没有indexof()函数 但是提供了一个 instr() 方法 具体用法: select instr('保定市南市区 ...
- PHP类中的__get()和__set函数到底有什么用
PHP类中的__get()和__set函数到底有什么用 一.总结 一句话总结:当试图获取一个不可达变量时,类会自动调用__get.同样的,当试图设置一个不可达变量时,类会自动调用__set.在网站中, ...
- C++多继承中重写不同基类中相同原型的虚函数
在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA { public: virtual void TestA(); }; class ...
最新文章
- Linux:hping高级主机扫描
- jdbc select语句_SELECT语句使用JDBC和Hibernate批量获取
- antd 表单域验证规则 - 只能输入数字字符,去除前导0
- python 连通区域_python skimage 连通性区域检测方法
- java gc堆中的分区_jvm内存各个区域详解
- 商户分账交易汇总和商户交易汇总不一致
- html计算天数,Javascript实现简易天数计算器
- iPhone XI Max带壳渲染图曝光:依然刘海屏 后置“浴霸”三摄实锤
- 【报告分享】2020年数字政府新基建发展白皮书.pdf(附下载链接)
- IDEA springboot maven 项目部署
- 蓝桥杯2019年第十届C/C++省赛A组第三题-最大降雨量
- Java——常用类(File)
- java中String类和StringBuffer类实例详解
- 韩顺平 零基础30天学会Java 学习笔记
- 基于PSIM及其DLL模块的单相全桥并网逆变器仿真
- Linux常用软件包(常用命令)
- 群晖服务器共享文件忘记密码,群晖synology NAS ds 1815+忘记google authenticator二次验证密码...
- Introducing Android Instant Apps - Google I-O 2016 翻译字幕
- 《自然语言处理入门》笔记
- 使用PQmagic磁盘分区大师导致磁盘文件丢失