《从LRS项目重构来看‘泛型’(一)——追根寻源,看C++中的模板技术简介》
2015-05-03 21:10
429 查看
在谈泛型这个概念之前,先来回顾一下C++中一个重点内容吧
C++中的模板:
模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。
模板是一种对类型进行参数化的工具;
通常有两种形式:函数模板和类模板;
函数模板针对仅参数类型不同的函数;
类模板针对仅数据成员和成员函数类型不同的类。
使用模板的目的:
是能够让程序员编写与类型无关的代码。比如编写了一个交换两个整型int 类型的swap函数,这个函数就只能实现int 型,对double,字符这些类型无法实现,要实现这些类型的交换就要重新编写另一个swap函数。使用模板的目的就是要让这程序的实现与类型无关,比如一个swap模板函数,即可以实现int 型,又可以实现double型的交换。模板可以应用于函数和类。
(注意:模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行,比如不能在main函数中声明或定义一个模板。)
咱们重点看一个函数模板的例子吧。
这就是利用了函数模板之后达到的效果,不仅可以输出字符串,还可以输出数字。
小结:
函数模板在函数具体实例化的时候编译器来决定需要返回和处理的数据类型,极大的提高了编程的灵活性、安全性
提高了代码的复用率!相比较函数重载,我觉得用函数模板这里的代码量更少,而且不容易出错。
步入正题:
说了那么多C++ 的内容,无非就是想告诉大家,一件事儿。其实,咱们学来学去,还是那些东西,只不过是换了身衣服而已。不信?
请挪步下篇博客从:《从LRS项目重构来看"泛型"(二)——异曲同工,泛型过程和C++函数模板的比较》
C++中的模板:
模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。
模板是一种对类型进行参数化的工具;
通常有两种形式:函数模板和类模板;
函数模板针对仅参数类型不同的函数;
类模板针对仅数据成员和成员函数类型不同的类。
使用模板的目的:
是能够让程序员编写与类型无关的代码。比如编写了一个交换两个整型int 类型的swap函数,这个函数就只能实现int 型,对double,字符这些类型无法实现,要实现这些类型的交换就要重新编写另一个swap函数。使用模板的目的就是要让这程序的实现与类型无关,比如一个swap模板函数,即可以实现int 型,又可以实现double型的交换。模板可以应用于函数和类。
(注意:模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行,比如不能在main函数中声明或定义一个模板。)
咱们重点看一个函数模板的例子吧。
<span style="font-family:KaiTi_GB2312;font-size:18px;">#include <string> #include <iostream> using namespace std; template<typename T> void print(const T& var) { cout << var << endl; } int main() { string str("Hello World"); const int num=1234; print(str); print(num); return 0; } //输出:Hello World // 1234 </span>
这就是利用了函数模板之后达到的效果,不仅可以输出字符串,还可以输出数字。
小结:
函数模板在函数具体实例化的时候编译器来决定需要返回和处理的数据类型,极大的提高了编程的灵活性、安全性
提高了代码的复用率!相比较函数重载,我觉得用函数模板这里的代码量更少,而且不容易出错。
步入正题:
说了那么多C++ 的内容,无非就是想告诉大家,一件事儿。其实,咱们学来学去,还是那些东西,只不过是换了身衣服而已。不信?
请挪步下篇博客从:《从LRS项目重构来看"泛型"(二)——异曲同工,泛型过程和C++函数模板的比较》
相关文章推荐
- 《从LRS项目重构来看“数据类型”——(第一话)DataTable转换泛型集合出现的类型冲突》
- 《LRS项目重构来看"泛型"(二)——异曲同工,泛型过程和C++函数模板的比较》
- 《从LRS项目来看”泛型“(三)——刨根问底,泛型工作原理》
- 《从LRS项目重构来看“数据类型”——(第二话)局部类型推理(一)》
- 《从LRS项目重构看“泛型”(四)——代码实战,将DataTable转成泛型实体集合》
- 《从LRS项目重构来看“数据类型”——(第二话)局部类型推理(二)》
- C++ 模板类型萃取技术 第二部分 基于泛型的类型萃取技术
- 【技术研究-泛型1】泛型基础——C++模板
- opencv模板匹配笔记----C++练手项目
- 大顶堆的C++模板实现及二叉堆的简介
- vs2010定制C++的项目模板
- C++学习笔记57——非类型模板形参与泛型代码原则
- 栈的简介及C++模板实现
- 【C++的探索路19】泛型程序设计与模板之练习题
- C++ Coding Standards:模板和泛型
- C++第14周项目模板【项目3-数组类模板】
- C++“模板”和Java“泛型”
- C++模板与泛型(3.模板特化)
- SCSF 系列:Smart Client Software Factory 简介、安装及通过模板新建项目
- 第2章 C++模板技术