面向对象编程(OOP)和泛型编程都能处理在编写程序时不知道类型的情况, 不同之处在于: OOP能处理类型在程序运行之前都未知的情况, 而在泛型编程中, 在编译时就能获知类型了. 函数模板 模板是C++中泛型编程的基础, 一个模板就是一个创建类或函数的蓝图或者说公式. 模板定义以关键字template开始, 后跟一个模板参数列表, 这是一个逗号分隔的一个或多个模板参数的列表, 用小于号和大于号包围起来. template <typename T> int compare(const T &…
模板实参推断:对于函数模板,编译器利用调用中的函数实参来确定模板参数,从函数实参来确定模板参数的过程被称为模板实参推断. 类型转换与模板类型参数 与往常一样,顶层const无论在形参中还是在是实参中,都被会忽略. • const转换:可以将一个非const对象的引用(或指针)传递给const的引用(或指针)形参. • 数组或函数指针转换:一个数组实参可以转换为一个指向其首元素的指针.类似的,一个函数实参可以抓转换一个该函数类型的指针. template <typename T> T fobj(…
返回完整目录 目录 1.2 模板实参推断 Template Argument Deduction 1.2 模板实参推断 Template Argument Deduction 当调用函数模板(如max())时,模板参数由传入的实参决定.如果传递两个int给参数类型T,C++编译器推断出T的类型为int. 然而,T可能是类型的一部分.比如说,如果声明max()使用常量引用(const reference): template <typename T> T max(T const& a,…
1. 如图所示代码,模板函数 compare(const T&, const T&) 要求两个参数类型要一样. compare("bye","dad") 调用,将模板参数推断为 const char[4] (因为还有一个 NULL 字符串结尾),而且两个参数都为 const char[4],所以可以正常实例化模板函数. 而 compare("hi","world") 调用,将两个模板参数本别推断为 const…
类模板 #include<iostream> #include<vector> #include<memory> using namespace std; template <typename T> class BlobPtr; template <typename T> class Blob; template <typename T> bool operator==(const Blob<T>&, const…
面向对象编程(OOP)和泛型编程(GP)都能处理在编写程序时类型未知的情况 OOP能处理运行时获取类型的情况 GP能处理编译期可获取类型的情况 标准库的容器.迭代器.算法都是泛型编程 编写泛型程序时独立于任何类型,使用泛型程序时提供类型,程序实例在该类型上运行 模板是泛型编程的基础.一个模板是一个创建类/函数的蓝图,使用泛型类型/泛型函数时,提供信息将蓝图转换为特定的类/函数,该转换发生在编译期. 16.1 定义模板 16.1.1 函数模板 可定义一个通用的函数模板来处理参数为多种类型的情形,而…
第16章 string类和标准模板库 1. string容易被忽略的构造函数: string(size_type n, char c)长度为n,每个字母都为c string(const string & str, size_type pos = 0, size_type n = pos)初始化为str中从pos开始到结尾的字符,或从pos开始的n个字符 string(const char *s, size_type n)初始化为s指向的前n个字符,即使超过了s的结尾: string(Iter b…
模板是C++中泛型编程的基础,一个模板就是创建一个类或者函数的蓝图或者说公式. C++模板分为函数模板和类模板. 类模板则可以是整个类是个模板,类的某个成员函数是个模板,以及类本身和成员函数分别是不同的模板. 1.函数模板 函数模板以关键字template开始,后接尖括号括起来的模板参数列表,模板参数列表不允许是空的,也即模板参数至少有一个或多个,多个之间使用逗号分割. 模板参数表示的是函数中用到的类型或者是一个值.当我们使用模板时,根据提供的实参推断出实参的类型,该类型即被用于绑定到模板参数,…
STL提供了一组表示容器.迭代其.函数对象和算法的模板.容器是一个与数组类似的单元,可以存储若干个值.STL容器是同质的,即存储的值的类型相同:算法是完成特定任务(如对数组进行排序或在链表中查找特定值)的处方:迭代其能够用来遍历容器的对象,与能够便利数组的指针类似,是广义指针:函数对象是类似于函数的对象,可以使类对象或函数指针(包括函数名,因为函数名被用作指针).STL使得能够构造各种容器(包括数组.队列和链表)和执行各种操作(包括搜索.排序和随机排列).Alex Stepanov和Meng L…
Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统  nsswitch.conf配置文件 朋友们,今天我对你们说,在此时此刻,我们虽然遭受种种困难和挫折,我仍然有一个梦想.……我梦想有一天,这个国家会站起来,并真正实现其信条的真谛:‘我们认为这些真理是不言而喻的:人人生而平等.’……我梦想有一天,幽谷上升.高山下降,坎坷曲折之路成坦途,圣光披露.照满人间.——马丁·路德·金这有点扯远了,我肯定是比不上马丁·路德·金的.不过我曾经也有一个梦想,就是:当我的电脑一开机…