高放的c++学习笔记之模板与泛型编程
函数模板
作用
有很多时候参数的类型以及返回值的类型是可变的,我们通过定义模板来让函数能更灵活的运用。
我们设计一个比较函数,如果能比较的两个参数是int型的,两个参数也可能都是string型的,单独设计出两个比较的函数就会比较繁琐,此时,我们用到了函数模板。
template<typename T>
int cmp(T a, T b){
return a>b;
}
(1)每次调用的时候,编译器用推断出的模板参数来为我们实例化一个特定版本的函数,T可被替换成任意类型。
(2)template可被class替换,两个的作用是相同的。
类模板
定义类模板
类模板的定义与模板函数的定义类似,但是声明对象的时候略有不同
template<typename T>class gg{
public :
T a;
gg(T aa):a(aa){};
};
gg<string> g("asa"); //声明部分
非类型模板参数
除了定义类型参数外,还可以在函数中定义非类型参数,一个非类型参数表示一个值而非一个类型。
例如
template<typename T, unsigned n>class gg{
public :
T a;
gg(T aa):a(aa){};
int aa();
};
inline和constexpr函数模板
和正常定义函数一样,将inline或constexpr写在模板之后函数体类型之前。
类模板的成员函数
template<typename T, unsigned n> //表示接下来的是一个模板
int gg<T, n>::aa(){ //通过gg<T, n>找到函数对应的类
for(int i = 0;i < n; i++)printf("gaofangzuishuai\n");
return a;
}
高放的c++学习笔记之模板与泛型编程的更多相关文章
- C++ Primer 学习笔记_76_模板与泛型编程 --模板定义[续]
模板与泛型编程 --模板定义[续] 四.模板类型形參 类型形參由keywordclass或 typename后接说明符构成.在模板形參表中,这两个keyword具有同样的含义,都指出后面所接的名字表示 ...
- C++ Primer 学习笔记_84_模板与泛型编程 --模板特化
模板与泛型编程 --模板特化 引言: 我们并不总是能够写出对全部可能被实例化的类型都最合适的模板.某些情况下,通用模板定义对于某个类型可能是全然错误的,通用模板定义或许不能编译或者做错误的事情;另外一 ...
- C++ Primer 学习笔记_77_模板与泛型编程 --实例化
模板与泛型编程 --实例化 引言: 模板是一个蓝图,它本身不是类或函数.编译器使用模板产生指定的类或函数的特定版本号.产生模板的特定类型实例的过程称为实例化. 模板在使用时将进行实例化,类模板在引用实 ...
- C++ Primer 学习笔记_85_模板与泛型编程 --模板特化[续]
模板与泛型编程 --模板特化[续] 三.特化成员而不特化类 除了特化整个模板之外,还能够仅仅特化push和pop成员.我们将特化push成员以复制字符数组,而且特化pop成员以释放该副本使用的内存: ...
- C++ Primer 学习笔记_75_模板与泛型编程 --模板定义
模板与泛型编程 --模板定义 引言: 所谓泛型程序就是以独立于不论什么特定类型的方式编写代码.使用泛型程序时,我们须要提供详细程序实例所操作的类型或值. 模板是泛型编程的基础.使用模板时能够无须了解模 ...
- C++ Primer 学习笔记_76_模板和泛型编程 --模板定义[继续]
模板和泛型编程 --模板定义[续] 四.模板类型形參 类型形參由keywordclass或 typename后接说明符构成.在模板形參表中,这两个keyword具有同样的含义,都指出后面所接的名字表示 ...
- C++ Primer 学习笔记_79_模板与泛型编程 --模板编译模型
模板与泛型编程 --模板编译模型 引言: 当编译器看到模板定义的时候,它不马上产生代码.仅仅有在用到模板时,假设调用了函数模板或定义了模板的对象的时候,编译器才产生特定类型的模板实例. 一般而言,当调 ...
- 高放的python学习笔记之基本语法
python与c++的不同之处 python的语句块不是用{}括起来的而是冒号后面跟一些与比当前语句多一的tab缩进的语句. 1.定义变量 python的变量类型不需要人为指出,会根据赋值的类型决定此 ...
- 高放的c++学习笔记之重载运算与类型转换
▲基本概念 (1)重载运算符是具有特殊名字的函数,它们的名字又operator和其后要定义的运算符号共同构成.. (2)对于一个运算符号来说它或者是类的成员,或者至少含有一个类类型的参数. (3)我们 ...
随机推荐
- 浏览器的模式问题 Quirks Mode vs Standards Mode
当微软开始产生与标准兼容的浏览器时,他们希望确保向后兼容性.为了实现这一点,他们IE6.0以后的版本在浏览器内嵌了两种表现模式: Standards Mode(标准模式或Strict Mode)和Qu ...
- PS5穿越云层3D文字
妈的,搜狗浏览器有时候会出问题,保存的内容找不到了…… 视图--显示参考线或者“显示额外内容”会取消或者加上参考线,后者功能更强一些,ctrl+D有时可以代替后者的功能,后者可以去掉蒙版的参考线,前者 ...
- 关于.net的概念
IIS不仅仅是asp.net还有php等 所以w3wp是基本单元. 然后Managed Code加载 AppDomain, 不管是桌面程序还是asp.net程序 System.Web(HttpRunt ...
- Open vSwitch源码阅读【转】及自己的理解【稍后更新】
http://blog.chinaunix.net/uid-24485075-id-2240075.html
- 【转】两分钟彻底让你明白Android Activity生命周期(图文)!----不错
原文网址:http://blog.csdn.net/android_tutor/article/details/5772285 大家好,今天给大家详解一下Android中Activity的生命周期,我 ...
- HBase MultiVersionConsistencyControl
注明:本文部分文字和图片翻译或引用自http://blogs.apache.org/hbase/entry/apache_hbase_internals_locking_and. HBase在保证高性 ...
- 【最大流】XMU 1595 机器调度
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1595 题目大意: T组数据,n个任务,m个机器,对于每个任务:有一个处理时间p(表示这 ...
- java数组并集/交集/差集(补集)
1.说明 使用java容器类的性质选择容器 2.实现 package com.wish.datastrustudy; import java.util.HashSet; import java.uti ...
- ANT打包 小实例
ANT打包 package src; public class Hello { /** * @param args */ public static void main(String[] a ...
- 经典算法:快排的Javascript版本
function swap(arr,l,r){ var temp=arr[l]; arr[l]=arr[r]; arr[r]=temp; } function partition(arr,camp,l ...