c++模板
来源:互联网 发布:linux nslookup找不到 编辑:程序博客网 时间:2024/06/10 17:31
模板与泛型编程
(1)首先关于几个概念,像这样
template<class U,class V>template<tpyename T>
上述两个关键字 class typename有完全相同过的含义,可以互换使用。
是模板的定义,下面的定义语句分别是声明函数模板
<pre name="code" class="cpp">template<tpyename T>int compare(const T &v1,const T &v2)template<tpyename T>int compare2(const T &v1,const T &v2)
类模板与之类似。注意,我们在这里不说是模板函数,而说是函数模板,是因为实际上上述的表达就不是一个函数,而是一个可以实例化为函数的模板。我们可以看到,此时,模板不过是函数模板的一部分。(一句话,函数模板和类模板也是模板。)
就像在不同函数的形参列表中形参名字可以相同,且没有任何联系一样,不同模板可以使用相同的模板名字。就像上面所显示一样。
上面的模板中,T称为模板的类型形参,v1和v2则成为模板的非类型形参。
(2)关于泛型程序
在使用模板技术后,我们有能力编写出和类型无关的代码,我们将其称之为泛型程序。一般有下面两个原则:
a模板的形参请使用const类型的引用(因为很多类型是禁止复制的,这样在编译器试图实例化时就会出错)
b尽量减少在模板中实现中所用到的操作符。比如说可以用==和!=完成就别用<,而使用了小于号就别使用大于号了
(3)模板的编译模型(只讨论包含编译模型)
在你使用函数时,编译器只需要看到函数的声明就好了。类似的,定义对象的事后,编译器只要看到类的定义即可,所以,一般类的定义和函数的声明被放在头文件中。
然而模板则不同,当你在调用函数模板或类模板时,由于编译器需要进行实例化,所以一并需要该模板的定义。所以你必须在头文件结束时讲对应的实现cpp文件include到该头文件中。
0 0
- C++-模板
- C++-模板
- C++:模板
- C++:模板
- C++:模板
- 模板 (C++)
- C ++ 模板
- C ++ 模板
- 【C++】模板
- c++----------模板
- C++--------------------------------------------模板
- c++--模板
- C++:模板
- 【基础C&C++】模板
- 【c/c++】类模板
- 【C/C++】模板类
- 【c++】模板和模板类
- C/C++:函数模板与类模板
- Alpha、Beta、RC、GA版本的区别
- 金额数字转换到大写
- java 线程详解
- malloc、free与内存碎片
- QTP
- c++模板
- 同事离职
- 使用 Task 替换 ThreadPool ,异步监测所有线程(任务)是否全部执行完毕
- windbg中memory查找以及写到文件
- 关于在storyboard中使用自己创建的控件
- java开发中遇到的问题记录
- Hello,CSDN.
- python列表余集
- Meta标签详解