欢迎来到天天文库
浏览记录
ID:50824795
大小:36.95 KB
页数:2页
时间:2020-03-15
《C语言编程实战-3-函数模板.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、函数模板在C++中,有模板一说,将一些处理逻辑相同只是数据类型不同的方法写成模板类或者模板函数,避免重复开发和冗余代码。在C语言中,能否实现同样的功能呢?答案是肯定的。程序任务:写三个函数,分别实现对整数、浮点、双浮点数组的求和计算。通常,我们最容易想到的是独立写三个函数求和函数,分别处理不同的数据类型。当代码写完后,你会发现,三个函数除了传入的参数与返回值数据类型不同外,其它都一致,这想当于同一份逻辑写了三次。在C语言编程实战1中,我们讲解了如何通过回调函数的方式来消除冗余的逻辑,回调函数理论上可以实现我们本节的编程任务,但比较
2、别扭(你可以去尝试)。今天介绍使用“函数模板”的方式来达成目标。代码如下:#include#defineDECLARE_SUM_FUN(type)typetype##_sum(typea[],intcnt){inti;typers=a[0];\for(i=1;i3、*argv[]){inta[3]={1,2,3};floatb[3]={1.1,2.2,3.3};doublec[3]={1.11,2.22,3.33};printf("%d%f%f",int_sum(a,3),float_sum(b,3),double_sum(c,3));return0;}在示例代码中,我们写了一个DECLARE_SUM_FUN宏,它有一个参数type,用于指定数据类型。宏的内容是一个类似函数的东西,这就是所谓的函数模板。这个函数模板提供了数组求和的逻辑。紧接着,我们使用了三行代码:DECLARE_SUM_4、FUN(int);DECLARE_SUM_FUN(float);DECLARE_SUM_FUN(double);实际上,这三行代码都是预编译内容,在对程序进行编译的时候,编译器会将其展开成真正的代码内容,如DECLARE_SUM_FUN(int);展开后的代码是:intint_sum(inta[],intcnt){inti;intrs=a[0];for(i=1;i5、去打理。因此我们在主函数中能够直接调用int_sum,float_sum与double_sum。总结:1C语言不支持函数模板,所谓的函数模板是通过宏来实现的。2函数模板很好地实现了只写一处统一逻辑,处理不同类型数据的目的。3使用函数模板与不使用函数模板写重复逻辑在编译后的代码是一样的,函数模板没有改变程序的运行效率,只是将那些重复代码的低级工作交给了编译器来处理。
3、*argv[]){inta[3]={1,2,3};floatb[3]={1.1,2.2,3.3};doublec[3]={1.11,2.22,3.33};printf("%d%f%f",int_sum(a,3),float_sum(b,3),double_sum(c,3));return0;}在示例代码中,我们写了一个DECLARE_SUM_FUN宏,它有一个参数type,用于指定数据类型。宏的内容是一个类似函数的东西,这就是所谓的函数模板。这个函数模板提供了数组求和的逻辑。紧接着,我们使用了三行代码:DECLARE_SUM_
4、FUN(int);DECLARE_SUM_FUN(float);DECLARE_SUM_FUN(double);实际上,这三行代码都是预编译内容,在对程序进行编译的时候,编译器会将其展开成真正的代码内容,如DECLARE_SUM_FUN(int);展开后的代码是:intint_sum(inta[],intcnt){inti;intrs=a[0];for(i=1;i5、去打理。因此我们在主函数中能够直接调用int_sum,float_sum与double_sum。总结:1C语言不支持函数模板,所谓的函数模板是通过宏来实现的。2函数模板很好地实现了只写一处统一逻辑,处理不同类型数据的目的。3使用函数模板与不使用函数模板写重复逻辑在编译后的代码是一样的,函数模板没有改变程序的运行效率,只是将那些重复代码的低级工作交给了编译器来处理。
5、去打理。因此我们在主函数中能够直接调用int_sum,float_sum与double_sum。总结:1C语言不支持函数模板,所谓的函数模板是通过宏来实现的。2函数模板很好地实现了只写一处统一逻辑,处理不同类型数据的目的。3使用函数模板与不使用函数模板写重复逻辑在编译后的代码是一样的,函数模板没有改变程序的运行效率,只是将那些重复代码的低级工作交给了编译器来处理。
此文档下载收益归作者所有