C++模板 您所在的位置:网站首页 重载方括号 C++模板

C++模板

2023-07-02 00:15| 来源: 网络整理| 查看: 265

目录

模板的由来

函数模板

函数模板概念

函数模板的使用

模板参数的匹配原则

类模板的使用

方括号( [ ] )的重载

结束语

模板的由来

使用函数重载虽然可以实现,但是有一下几个不好的地方: 1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数 2. 代码的可维护性比较低,一个出错可能所有的重载均出错

小记录:auto是利用右边来推左边的。函数没有生命,只有对象才有,函数编译之后就是一串指令,销毁的是函数创立的栈帧。注意库里面是有swap函数的,所以在下面模板实现时需要注意,要不就指定使用,要不就用命名空间封装,不要把std拆开

函数模板 函数模板概念         函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。

函数模板的使用 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。

//函数模板的使用 //template template //两种模板给定是一样的,不过第二种显目点 void Swap(T& left, T& right) { T tmp = left; left = right; right = tmp; } int main() { int a = 10, b = 20; double x = 10.1, y = 20.2; Swap(a, b); Swap(x, y); return 0; }

相比前面的函数重载显然使用模板是更加的简洁了

函数模板实例化的实质,在反汇编下可以看到更多信息

 

 一些情况的解决方法

//函数模板的使用 //template template //两种模板给定是一样的 void Swap( T& left, T& right) { T tmp = left; left = right; right = tmp; } int main() { int a = 10, b = 20; double x = 10.1, y = 20.2; Swap(a, b); Swap(x, y); //这种写法是不对的,系统并不知道实例化哪一个,也并不会隐式类型转换 //准确来说还没有到传参(隐式类型转换就是在这个时候)的时候就报错了 //加const也不行(并不是常属性的原因,基于不是交换函数的函数模板,这里加const岂不是不让交换了) //Swap(a, y); return 0; }

方法一:强制类型转换

//强转也可以解决问题 template //两种模板给定是一样的 T Add(const T& left, const T& right) //注意这里的const,因为隐式类型转换会有 { //临时变量产生,而这个临时变量具有常属性所以得加const return left + right; } int main() { int a = 10, b = 20; double x = 10.1, y = 20.2; cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有