C++学习第15篇-函数模板

来源:互联网 发布:如何搭建数据库 编辑:程序博客网 时间:2024/05/20 05:11

1. 函数模板

1)函数模板的需要

通过以上篇的学习,你可以写出易读、安全和可维护的代码;函数和类是高效编程的灵活工具,但C++必须要求你明确所有参数的类型;

例如你需要写求最大值的函数,包括整型和浮点型:


以上两个函数在形式上是一样的,只是类型不一样。

如果只写一个函数,满足任何类型,可以用函数模板来实现。

1)什么是函数模板?

模板-用以创建类似对象的模式;

在C++中,函数模板是用以创建类似函数的模式。使用模板类型参数-通常简略为-T。

2)创建函数模板


3)使用函数模板


如上可以看出,使用函数模板节省了大量时间,减少了代码维护量,更安全。

模板函数也有一些不足:一些老编译器没有足够的支持;模板函数给出了难以理解的错误信息;

在STL中,已有Max函数。

2. 函数模板示例

1)函数模板示例

C++并没有直接编译模板函数;在编译期间,当遇到调用函数模板,编译器将类型和参数传入模板,执行得到结果;

编译器足够聪明来确定是否需要创建一个不同类型的函数模板实例。

2)运算符、函数调用和函数模板

模板函数应用于内建数据类型和类,模板中调用的任何运算符和函数必须是已定义的。


3. 模板类

函数模板是泛型编程的入门了,但函数模板不能解决所有的问题。

这时,该介绍模板类了。

1)模板和容器类

之前介绍过数组容器:

Arary.h:



测试:


模板类是应用容器类的最理想的;

模板类是C++最好和最有用的特性。

4. 表达式参数和模板特殊化

模板类可以使用另外一种模板参数,即表达式参数。

1)表达式参数:

表达式参数-不是由类型来取代的参数,而是由值来取代的参数。

一个表达式参数可以是:

A)一个是整型或枚举型的值;

B)一个对象的指针或引用;

C)一个函数的指针或引用;

D)一个成员函数的指针或引用。


2)模板特殊化

如下例的Storage:


Storage可以存储多种类型的,但是需要打印如char类型指针时:


我们可以通过函数模板特殊化:



5. 类模板特殊化

如下例:


Storage8适合多种类型。

在前一章节中,可以特殊化成员函数,提供对特殊类型的特殊处理。

2)类模板特殊化

类模板特殊化-允许为明确的数据类型特殊化类模板;类模板特殊化看作是完整独立的类。

原创粉丝点击