谈一谈C++ template/C++ 模板

本文探讨了C++模板的使用,包括为什么要使用模板、何时应该使用模板,以及模板的语法和分类,如函数模板、类模板和模板特化。通过实例讲解了模板覆盖和特化,并介绍了类模板与友元的相关概念。
摘要由CSDN通过智能技术生成

这里劝退一波 Qt Ui,仅仅是 Ui,不是 Qt 哈

选择 Qt 一时爽, Ui 开发火葬场。

忙活两个小时,解决的只是一个非常小的窗口效果,接下来考验你的眼力的时间到了
在这里插入图片描述
在这里插入图片描述

你找到了上面两幅图的不同了吗?

1 为什么要使用模板

也许平常写 C++ 的时候我们不用模板也能 6 得飞起,那为什么还会要产生模板的需求呢?

以下面的例子为例,如果我有了模板,我就可以生产同一类型的多个表情包

在这里插入图片描述
但是没有模板的你只能使用最原本的熊猫人,在斗图大战中败北,含恨而归

在这里插入图片描述
形象吧,接下来我们来谈一谈什么时候该使用模板,以及模板的语法和分类。

2 究竟我是否该使用模板

是否要用模板,我们可以借鉴开发时的 RunOfThree 原则

RunOfThree原则

  1. 第一次用的时候写个“特例”
  2. 第二次用的时候copy第一次的代码,
  3. 第三次用的时候就得写一个通用的,当然,为了达到通用性,你要做的不仅仅是使用模板。

3 C++ 模板语法与分类

模板下面又分为函数模板类模板模板类等等,这里我们简单地谈谈前面三种

3.1 函数模板

语法

template <class T1,class T2,...,>
返回类型 函数名(形参表){
   
    statement;
}

例子

template <class T>
// equal to template <typename T>
T max(const T& a, const T& b) {
   
    return a > b ? a : b;
}

说明

  1. template是C++中用来声明模板的keyword,class和typename是模板形参的声明,两者的差别见:difference of keywords typename and class in templates
  2. 并不是写了函数模板就可以自动处理所有类型的数据了,比如上面的max函数。如果你相对两个自定义类型对象使用,你还得自己重载运算符>。

3.2 类模板和模板类

虽然我们说模版类就是类模版实例化之后的类,但其实there is no such thing as a “template class,” there is only a “class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值