模板与泛型编程
--模板特化
引言:
我们并不总是能够写出对所有可能被实例化的类型都最合适的模板。某些情况下,通用模板定义对于某个类型可能是完全错误的,通用模板定义也许不能编译或者做错误的事情;另外一些情况下,可以利用关于类型的一些特殊知识,编写比从模板实例化来的函数更有效率的函数。
compare函数和 Queue类都是这一问题的好例子:与C风格字符串一起...
分类:
编程语言 时间:
2016-05-12 21:57:56
阅读次数:
246
模板与泛型编程
--重载与函数模板
引言:
函数模板可以重载:可以定义有相同名字但参数数目或类型不同的多个函数模板,也可以定义与函数模板有相同名字的普通非模板函数。
但是,声明一组重载函数模板不保证可以成功调用它们,重载的函数模板可能会导致二义性。
一、函数匹配与函数模板
如果重载函数中既有普通函数又有函数模板,确定函数调用的步骤如下:
1...
分类:
编程语言 时间:
2016-05-12 15:33:25
阅读次数:
230
模板与泛型编程
--模板特化[续]
三、特化成员而不特化类
除了特化整个模板之外,还可以只特化push和pop成员。我们将特化push成员以复制字符数组,并且特化pop成员以释放该副本使用的内存:
template<>
void Queue::push(const char *const &val)
{
char *new_item = new...
分类:
编程语言 时间:
2016-05-12 15:32:11
阅读次数:
214
模板与泛型编程
本文尝试着介绍对泛型编程的理解,从而扩展我们的template编程。泛型编程是C++中非常重要的一部分,它使得我们节省了很多编写不同代码的体力。
1. 了解隐式接口和编译器多态与OOP的不同之处面向对象编程世界总是以显式接口和运行期多态解决问题。例如:void doProcessing( Widget &w) {
if (w.size() > 10 && w != som...
分类:
编程语言 时间:
2016-05-06 16:01:48
阅读次数:
166
16.1.1函数模板//template parameter listtemplateint compare(const T1& v1, const T2&v2){ if (v1 int compare(const char(&p1)[N], const char(&p2)[M]){ s...
分类:
其他好文 时间:
2016-01-23 00:44:50
阅读次数:
270
《C++ Primer 4th》读书笔记所谓泛型编程就是以独立于任何特定类型的方式编写代码。泛型编程与面向对象编程一样,都依赖于某种形式的多态性。面向对象编程中的多态性在运行时应用于存在继承关系的类。我们能够编写使用这些类的代码,忽略基类与派生类之间类型上的差异。在泛型编程中,我们所编写的类和函数能...
分类:
编程语言 时间:
2016-01-14 23:57:05
阅读次数:
412
函数模板作用有很多时候参数的类型以及返回值的类型是可变的,我们通过定义模板来让函数能更灵活的运用。我们设计一个比较函数,如果能比较的两个参数是int型的,两个参数也可能都是string型的,单独设计出两个比较的函数就会比较繁琐,此时,我们用到了函数模板。templateint cmp(T a, T ...
分类:
编程语言 时间:
2015-11-06 22:18:26
阅读次数:
238
条款41 : 了解隐式接口和编译器多态 1条款42 : 了解typename的双重意义 1
分类:
编程语言 时间:
2015-09-19 13:50:56
阅读次数:
145
16 模板定义16.1 定义函数模板 1 #include 2 using namespace std; 3 template 4 int compare(const T &v1,const T &v2) 5 { 6 if(v1v2) 9 return 1;10 re...
分类:
其他好文 时间:
2015-08-13 21:46:47
阅读次数:
182
例子:比较两个值的函数模板template
int compare(const T &t1, const T &t2)
{
if (t2 < t1) return 1;
if (t1 < t2) return -1;
return 0;
}编写泛型代码的两个重要原则:
1 模板中函数参数是const的引用
2 函数体中条件判断仅适用<比较运算符模...
分类:
编程语言 时间:
2015-08-07 01:51:25
阅读次数:
195