C++模板 | 您所在的位置:网站首页 › 重载方括号 › C++模板 |
目录 模板的由来 函数模板 函数模板概念 函数模板的使用 模板参数的匹配原则 类模板的使用 方括号( [ ] )的重载 结束语 模板的由来小记录: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 实验室设备网 版权所有 |