C++之模板(三)

news2024/12/25 10:53:13

1、缺省模板参数

可以将数据结构类型传递进来,比如=vectop<T>(如果没传就是默认)

把vector当作类型参数来传递,从而使用它的接口然后适配出新的接口。实际上这个Stack称为适配器。有时候可能需要vector,但是又需要超出vector本身自带的功能,这时候就需要适配器,将vector当作参数传进去,嵌入到新写的模板中,这样就能适配原vector和新功能。

Stack.h

#include <stdexcept>
#include <deque>
using namespace std;

template <typename T, typename CONT = deque<T> >
class Stack
{
public:
    explicit Stack();
    ~Stack();

    void Push(const T& elem);
    void Pop();
    T& Top();
    const T& Top() const;
    bool Empty() const;

private:
    CONT c_;
};

template <typename T, typename CONT>
Stack<T, CONT>::Stack() : c_()
{

}

template <typename T, typename CONT>
Stack<T, CONT>::~Stack() {

}

template <typename T, typename CONT>
void Stack<T, CONT>::Push(const T& elem)
{
    c_.push_back(elem);
}

template <typename T, typename CONT>
void Stack<T, CONT>::Pop()
{
    c_.pop_back();
}

template <typename T, typename CONT>
T& Stack<T, CONT>::Top()
{
    return c_.back();
}

template <typename T, typename CONT>
const T& Stack<T, CONT>::Top() const
{
    return c_.back();
}

template <typename T, typename CONT>
bool Stack<T, CONT>::Empty() const {
    return c_.empty();
}

main.cpp

#include <iostream>
using namespace std;
#include "Stack.h"
#include <vector>

int main() {
    Stack<int, vector<int> > s;
    s.Push(1);
    s.Push(2);
    s.Push(3);
    while (!s.Empty())
    {
        cout << s.Top() << endl;
        s.Pop();
    }

    return 0;
}

// 输出
3
2
1

2、成员模板

上面的最后一行会报错,因为d已经定义成了double型,但是此时传入了int型。所以要把成员函数定义成模板。

注意这样子定义的话,x不能直接访问私有成员value,因为调用Assign的时候,参数的类型有可能和对象的类型不一样,不一样的时候,其实是两个类,类之间不能直接访问私有成员。同一种类型才能访问私有成员。

3、关键字typename的作用

如果没有typename,那么编译器就会解析成这样:这个T是一个类型,然后::域运算符,取到这个类中的静态数据成员SubType,然后*被解析成乘以,变成了SubType 乘以 ptr;

所以有typename则表示,后面的是一个类型,定义一个T::SubType类型的指针ptr

template <typename T>
class MyClass
{
private:
    typename T::SubType* ptr_;
};

class Test
{
public:
    typedef int SubType;  // 这边的话必须声明为public
};

int main() {
    MyClass<Test> myclass;
}

4、派生类和模板

5、面向对象与泛型编程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1834772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入解析知识付费平台的核心功能模块:满足个性化学习需求的数字化教育新星

在数字化学习的大潮中&#xff0c;知识付费平台已成为教育行业的一颗新星&#xff0c;它以满足用户需求为核心&#xff0c;提供便捷高效的学习渠道。该平台汇聚了各类专业知识&#xff0c;覆盖职业技能、生活兴趣和人文社科等多个领域&#xff0c;满足不同用户的学习需求。同时…

【二】【QT开发应用】QMake和CMake介绍,GN,QT三个窗口类的区别,QMainWindow, QWidget,QDialog

QMake和CMake介绍 qmake&#xff1a;qt独有的代码构建工具, 是一种简洁的构建工具&#xff0c;主要用于生成 Qt 项目的跨平台编译配置文件&#xff0c;语法简单&#xff0c;适合小型和中型项目。 cmake&#xff1a;C通用的代码构建工具&#xff0c;绝大部分C开源项目都使用cm…

MySQL 8.0 版本更新 要点 列表 (8.0-8.0.23)

开头还是介绍一下群&#xff0c;如果感兴趣 PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;共 2370 人左右…

楼顶气膜体育馆建设的关键问题解析—轻空间

随着城市化进程的加快和土地资源的日益紧张&#xff0c;楼顶气膜体育馆作为一种新兴的建筑形式备受关注。其轻盈美观、节省用地、施工便捷等特点&#xff0c;使其成为城市空间利用的理想选择。那么&#xff0c;在楼顶建设气膜体育馆有哪些关键问题需要考虑呢&#xff1f; 一、楼…

Simulink代码生成: 状态机的其他建模方法

本文研究状态机建模的一些方法和技巧。 文章目录 1 引入2 状态机建模方法2.1 状态机中的计时2.2 状态机中的计数2.3 转移顺序 3 总结 1 引入 博主一直很喜欢用Simulink中的状态机建模&#xff0c;在这里想记录一下自己平时使用Stateflow建模的心得。因为自身行业所限&#xff…

LayUI使用(二)处理表格会出现下拉框的问题

一、问题描述 如下&#xff0c;layui的表格渲染后&#xff0c;当鼠标悬停在表格项时会出现右侧的下拉框&#xff0c;layui版本较老&#xff0c;原因未知 二、处理办法 在cols里面加上width&#xff0c;也不用每个都加&#xff0c;加一部分表格项即可 注意&#xff1a;若想禁止…

全功能知识付费小程序源码系统 界面支持万能DIY装修 带完整的安装代码包以及搭建部署教程

系统概述 在当今数字化时代&#xff0c;知识付费已经成为一种重要的商业模式。为了满足市场对于便捷、高效、个性化的知识付费解决方案的需求&#xff0c;小编给大家分享一款全功能知识付费小程序源码系统。这一系统不仅具备界面支持万能 DIY 装修的独特优势&#xff0c;还配备…

推荐系统三十六式学习笔记:原理篇.矩阵分解11|facebook是怎么为十亿人互相推荐好友的?

目录 回顾矩阵分解交替最小二乘原理&#xff08;ALS&#xff09;隐式反馈推荐计算总结 上一篇中&#xff0c;我们聊到了矩阵分解&#xff0c;在这篇文章的开始&#xff0c;我再为你回顾一下矩阵分解。 回顾矩阵分解 矩阵分解要将用户物品评分矩阵分解成两个小矩阵&#xff0c…

帕金森患者在饮食上需要注意什么

帕金森病患者在饮食上应该遵循以下几个基本原则&#xff1a; 饮食清淡&#xff1a;应多吃新鲜的水果和蔬菜&#xff0c;如苹果、芹菜、菠菜等&#xff0c;以补充维生素和促进胃肠道蠕动。营养均衡&#xff1a;应多吃富含优质蛋白的食物&#xff0c;如鸡蛋、牛奶&#xff0c;以…

需要用来做3D家具展示的软件哪个网站更专业?

国内外的3D家具展示软件网站并且值得推荐的也就那么几家&#xff1a; 1、Cedreo&#xff0c;Cedreo 是一个在线3D家居设计平台&#xff0c;适合专业的房屋建筑商、改造商和室内设计师。它允许用户创建2D和3D平面图以及室内外效果图&#xff0c;拥有7000多件可定制的3D家具、材…

考HCIE费这么大劲,只管三年?

在网络工程师的职业发展道路上&#xff0c;HCIE&#xff08;华为认证互联网专家&#xff09;认证无疑是一块极具含金量的垫脚石。 但许多人对它的有效期存在疑问&#xff0c;担心费尽心思获得的认证只能维持短暂的职业优势。 重认证机制是啥样的&#xff1f;一定要重认证吗&…

0-2年的网安新人突破低薪打杂困境妙招!

2024年即将到来&#xff0c;相信有很多人依旧对网络安全行业行业非常好奇&#xff0c;也有很多对网络安全了解过的小伙伴&#xff0c;依旧想要进入网络安全行业。确实&#xff0c;网络安全行业前景大、薪资高、入门门槛也相对较低。 但是&#xff0c;对于0-2年的网安新人&…

【Java】已解决java.lang.UnsupportedOperationException异常

文章目录 问题背景可能出错的原因错误代码示例正确代码示例注意事项 已解决java.lang.UnsupportedOperationException异常 在Java编程中&#xff0c;java.lang.UnsupportedOperationException是一个运行时异常&#xff0c;通常表示尝试执行一个不支持的操作。这种异常经常发生…

晶圆切割机(晶圆划片机)为晶圆加工重要设备 我国市场国产化进程不断加快

晶圆切割机&#xff08;晶圆划片机&#xff09;为晶圆加工重要设备 我国市场国产化进程不断加快 晶圆切割机又称晶圆划片机&#xff0c;指能将晶圆切割成芯片的机器设备。晶圆切割机需具备切割精度高、切割速度快、操作便捷、稳定性好等特点&#xff0c;在半导体制造领域应用广…

【MySQL】数据类型和表的约束

1. 数据类型 分类数据类型解释数值类型BIT (M)位类型。M位数&#xff0c;默认为1范围1-64BOOL01表示真假TINYINT [UNSIGNED]8位整型SMALLINT [UNDIGNED]16位短整型INT [UNSIGNED]32位整型BIGINT [UNSIGNED]64位长整型小数类型FLOAT [ (M, D) ] [UNSIGNED]32位浮点类型&#xf…

vue echarts画多柱状图+多折线图

<!--多柱状图折线图--> <div class"echarts-box" id"multiBarPlusLine"></div>import * as echarts from echarts;mounted() {this.getMultiBarPlusLine() },getMultiBarPlusLine() {const container document.getElementById(multiBar…

MathType软件下载2024最新版_MathType官方免费下载附加详细安装步骤

MathType(数学公式编辑器)是由Design Science公司研发的一款专业的数学公式编辑工具。MathType功能非常强大&#xff0c;尤其适用于专门研究数学领域的人群使用。使用MathType让你在输入数学公式的时候能够更加的得心应手&#xff0c;各种复杂的运算符号也不在话下。 安 装 包 …

氢气传感器:呼吸疾病的隐形向导

​ ​​在医学领域&#xff0c;每一次技术革新都可能成为疾病诊断与治疗的新曙光。氢气传感器&#xff0c;这一看似不起眼的装置&#xff0c;正逐渐成为辅助诊断呼吸系统疾病的关键工具。它如同一位精准的侦探&#xff0c;穿梭于呼吸的微风中&#xff0c;捕捉着那些可能预示…

sheng的学习笔记-AI-集成学习(adaboost,bagging,随机森林)

ai目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 目录​​​​​​​ 集成学习 什么是集成学习 集成学习一般结构&#xff1a; 示意图 弱学习器 经典算法 Boosting 什么是boosting 方法图 AdaBoost 算法 AdaBoost示意图 流程解析&#xff1a; 错误分类率error…

「Qt Widget中文示例指南」如何实现一个滑动条(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 滑动条示例展示了如…