首页 理论教育 函数模板的作用与使用方法详解

函数模板的作用与使用方法详解

时间:2023-10-25 理论教育 版权反馈
【摘要】:但是,函数模板的作用极其强大,也是不可忽略的。此时函数模板随之诞生。这是创建函数模板的根本原因。例1-24介绍了函数模板的使用方法。这样,函数模板的便捷性取代了多态函数的繁杂性,其意义可谓深远。例1-27中函数模板的功能是将任何数据类型转换为字符串,还可以将字符串转换为其他数据类型的数据。图1-13 例1-27的执行效果总结本小节主要讲述了函数模板的一些特性和使用方法。通过4个例题详细地演示函数模板的使用。

函数模板的作用与使用方法详解

学习和使用STL的程序员或者研究人员可能更需要快速地掌握和使用STL提供的各种容器。但是,函数模板的作用极其强大,也是不可忽略的。

函数模板定义了一个无限的相关函数集合。当函数除了数据类型不一致外,其余的处理全部相同。此时函数模板随之诞生。这是创建函数模板的根本原因。

函数模板可以定义参数化的非成员函数,使程序员能够用不同类型的参数调用相同的函数,由编译器决定该采用哪种类型,从函数模板中生成相应的代码。

提示

在例1-24的源代码中,template<typename T>voidprint(const T&var)是函数的定义,其中T代表数据类型或者类,函数print的参数是通用数据类型T。

例1-24

978-7-111-51399-5-Chapter01-98.jpg

例1-24的执行效果如图1-10所示。

978-7-111-51399-5-Chapter01-99.jpg

图1-10 例1-24的执行效果

提示

可以使用例1-25中的template<typename T>定义函数模板,也可以使用template<class T>定义函数模板,两者没有区别。目前程序员多用后一种方法,主要是因为关键字typename的诞生时间较短,多数人不知晓或者不习惯使用。

例1-24介绍了函数模板的使用方法。如果函数模板需要定义多个参数,可以对这些参数随意命名。每个参数必须以关键词开头,彼此之间使用逗号分隔。这样,函数模板的便捷性取代了多态函数的繁杂性,其意义可谓深远。

例1-25

978-7-111-51399-5-Chapter01-100.jpg

978-7-111-51399-5-Chapter01-101.jpg

例1-25的执行效果如图1-11所示。

978-7-111-51399-5-Chapter01-102.jpg

图1-11 例1-25执行效果

在例1-25中,函数模板的两个参数是同一类型,还可以使用多种类型的多个参数。

提示

请注意下面源代码中的黑体字。(www.xing528.com)

例1-26

978-7-111-51399-5-Chapter01-103.jpg

例1-26的执行效果如图1-12所示。

978-7-111-51399-5-Chapter01-104.jpg

图1-12 例1-26执行效果

总结

使用函数模板实现多个参数时,函数模板的参数既可以是同类型数据,也可以是不同类型数据。

函数模板的功能极其强大,但也存在个别情况。当待比较的函数模板没有提供正确的操作符或者方法时,程序不会对此进行编译。为避免此类错误,程序员可以使用函数模板与同名的非模板函数重载,即函数的定制。本书不再赘述。

下面提供一个函数模板的实例,供读者参考。例1-27中函数模板的功能是将任何数据类型转换为字符串,还可以将字符串转换为其他数据类型的数据。

首先,创建模板函数toString()和fromString(),并将其放在头文件Ex27.h中。

例1-27

978-7-111-51399-5-Chapter01-105.jpg

其次,创建主程序Ex27.cpp。

978-7-111-51399-5-Chapter01-106.jpg

978-7-111-51399-5-Chapter01-107.jpg

例1-27的执行效果如图1-13所示。

978-7-111-51399-5-Chapter01-108.jpg

图1-13 例1-27的执行效果

总结

小节主要讲述了函数模板的一些特性和使用方法。通过4个例题详细地演示函数模板的使用。希望读者在阅读文字内容的同时,认真阅读本节的4个例题。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈