浅谈C++函数模板

如果给出任意两个数,让他们完成相加求和的操作。我们应该怎么做呢?
在C语言的学习过程中,如果我们遇到此类题型,按照所学的C语言的知识,我们会给出以下3种解决方法:泛型、函数重载、宏函数。
但这三种解决问题的方法,却存在着极大的缺点。泛型它是个半闭半开区间,容易发生越界问题,而函数重载与宏函数则是处理类型较少。显然这三种方法,不足以解决这种问题的多样性。
C+++的函数模板却可以完美的解决此类问题。

模板的定义

 template<typename  T..>
 T 函数名(T 形参,T 形参..)
 {
      函数体
  }

typename的作用:(1)定义模板类型参数(2)T声明模板中的类型
可以使用任何类型来实例化该类型参数,只要所用类型提供模板使用的操作就可以。

模板的使用

通常而言,并不是把模板编译成一个可以处理任何类型的单一实体;而是对于实例化模板参数的每种类型,都从模板产生一个不同的实体。这种用具体类型代替模板参数的过程叫做实例化,它产生了一个模板的实例。
因此模板其实编译了两次分别是
(1)实例化之前,先检查模板本身语法是否正确
(2)实例化的时候,看模板代码是否所有的调用都有效。
模板的实例化
函数模板———实例化———>模板函数
显式实例化
当模板参数和调用参数没有发生关联,或者不能由调用参数来决定模板参数的时候,在调用时就必须显式指定模板实参。切记,模板实参演绎并不适合返回类型。
例如:

 template< typename  T,typename R,typename Q>
 Q Sum(T  a,T  b)
 {
       return a+b;
  }

这样就必须显示实例化

Sum<int ,double ,double>(2,3.1); //如果不写成这样,编译器是无法参演出返回值的类型

模板的特例化(自定义)
注意:与函数模板的修饰要一致
模板的头部编译
如果不给出类型,模板将进行实参推演
注意:不能让编译器产生二义性、不能缺少实参(要有推演依据)
模板参数
函数模板有两种类型参数
(1)模板参数:位于函数模板名称前,在尖括号中声明

template< typename  T> //T是模板参数

(2)调用参数:位于函数模板之后,在圆括号中声明

  T 函数名(T a,T b)//a,b是调用参数

模板的非类型参数 : 模板的非类型形参也就是内置类型形参,如template< typename T, int a>其中int a就是非类型的模板形参。
非类型形参在模板定义的内部是常量值,也就是说非类型形参在模板的内部是常量。
非类型模板的形参只能是整型,指针和引用,像double,float, String **这样的类型是不允许的。但是double &,double *,对象的引用或指针是正确的。
如果要接受一个不明确类型 用 auto:自动适应调节类型
模板的默认值 在C++98中不支持,但C++11中可以支持
模板的重载
对于非模板函数和同名的函数模板,如果其他条件都是相同的话,那么在调用的时候,重载解析过程通常会优先调用非模板函数,而不会从该模板产生出一个实例。所以其优先级为 普通函数版本>模板特例化版本>模板版本

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值