C++ 模板模板参数

2023-11-01

C++ 模板模板参数

1. 模板模板参数

C++模板的使用一共有以下几种情况。

  • 函数模板
  • 类模板
  • 模板参数
  • 成员模板

而本篇介绍模板模板参数

模板参数就是模板的参数,我们一般指定为T类型,实际上可以使用任何的名字,例如指定一个Foo的模板参数:

temlate<typename Foo>
Foo calc(const Foo& a, const Foo& b)
{
    return a+b;
}

而模板模板参数则是模板的参数又是一个模板,例如:

template<typename T, template<typename U> typename Container>
class XCls
{
    private:
        Container<T> c;
};

模板的第一个参数是T类型,第二个参数是一个Container,他是一个可以指定一个U类型的变量。

那么如何使用他呢?

template<typename T>
class test
{
    private:
        T t;
};

int main(void)
{
    XCls<std::string, test> mylst1;

    return 0;
}

我们可以定义一个模板类,然后将其如上方式传入就可以了。

但是如果传入一个容器呢?比如:list

XCls<string, list> mylst1;

如果编译就会报错。我们分析一波:

string 和 list传入到类XCls中,然后就会定义一个list<string>c变量,这样看起来是可以的,因此我们使用list容器的时候就是list<一个类型>,但是这里为什么就不行呢?是因为list容器实质上是有第二参数的,虽然第二参数有默认的参数,正如我们平常使用的那样,只需要指定一个参数,但是在这里无法通过编译,因此,我们使用如下解决办法:

template<typename T>
using Lst = std::list<T, std::allocator<T>>;

XCls<std::string, Lst> mylst2;
// 编译时需要加上std=c++11

使用C++11using关键字的新功能,来定义一个类型的别名,而且使用在模板的情况下,因此我们编译时要指定std=c++11

然后我们将list的别名Lst传入进入,就可以编译通过。

2. 这不是模板模板参数

如果是这么定义的模板参数,还会是模板模板参数吗?

template<typename T, typename Sequence = list<T>>
class stack
{
    private:
        Sequence c;
};

我们定义了一个stack的模板类,模板参数第一个是T类型,第二个是一个Sequence类型,有一个默认的类型是list<T>

使用方法有两种:

stack<int> s1;
stack<int, deque<int>> s2;

第一种,只指定了第一个模板参数,使用第二个默认的模板参数。

第二种,指定了两个模板参数。

但是!这不是模板模板参数。因为,一旦指定了第一个模板参数,那么第二个参数的类型就会确定,而真正的模板模板参数,第二个模板参数和第一个模板参数的类型是没有关系的,可以指定为第一个模板参数的类型,也可以指定为其他类型。因此,这不是模板模板参数!!!


以上都是本人自己的理解,如有错误,请谅解并恳请您的指正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 模板模板参数 的相关文章

  • 在列表中查找匹配项的最简洁方法

    在列表中查找内容的最佳方式是什么 我知道 LINQ 有一些不错的技巧 但我们也可以获取有关 C 2 0 的建议 让我们对这个常见的代码模式进行最佳重构 目前我使用这样的代码 mObjList is a List
  • Windows 10 UWP 中的视觉状态管理器未在页面加载时应用初始状态

    我有一个带有相关面板的页面 可以根据宽度重新组织 但是 除非宽度 gt 720px 否则它似乎不会在加载时应用任何状态 如果我在加载页面后调整页面大小 则两种状态都有效 解决方法是检查加载页面上的窗口大小并手动选择状态 但我相信这应该自动处
  • 无法在表适配器配置属性中找到对象“Web.config”的连接“MyConnName”

    I want to change the query in table adapter but it s not opening throwing an error Configure table Adapter Failed in pro
  • 函数的不明确的引用/值版本

    考虑以下函数原型 void Remove SomeContainer Vec const std size t Index SomeContainer Remove SomeContainer Vec const std size t In
  • Windows CE 6.0 和运行时链接到调试 DLL /MDd

    我在 x86 PC 上使用 Windows CE 6 0 R3 我已经为该平台构建了 NK bin 和 SDK 但我有一些问题需要了解如何使用 MTd 调试 DLL 构建控制台应用程序 如果我尝试构建这个 main c with MDd i
  • ASP.NET Core 中 AsNoTracking 的模拟或更好的解决方法

    您如何模拟 AsNoTracking 或者是否有更好的解决方法来解决此问题 Example public class MyContext MyContextBase Constructor public MyContext DbContex
  • 使用 Process.Start() 打开文件夹时访问被拒绝异常

    我有一个 C 中的 winforms 应用程序 我必须在其中打开某个文件夹 我用 System Diagnostics Process Start pathToFolder 这会导致以下异常 System ComponentModel Wi
  • 对无符号 8 位整数进行左移操作 [重复]

    这个问题在这里已经有答案了 我试图理解 C C 中的移位运算符 但它们给我带来了困难 我有一个无符号 8 位整数 初始化为一个值 例如 1 uint8 t x 1 根据我的理解 它在内存中的表示方式如下 0 0 0 0 0 0 0 1 现在
  • 如何实现可变虚拟成员函数

    所以我有这个功能 virtual void CallRemoteFunction const char pServerGameObjectId const char pFunctionName OVariant arg1 OVariant
  • 为什么Windsor只能拦截虚方法或接口方法?

    我正在阅读文档 发现如果不使用接口 那么 Windsor 只能拦截虚拟方法 这是 Windsor 的限制还是 C 语言的限制 我正在寻找深入的答案 C 语言在这里完全无关 问题是拦截在运行时级别如何工作 一种技术是从类继承 实现接口并将其用
  • C++ 中类型信息何时向后流动?

    我刚刚看了 Stephan T Lavavej 的演讲CppCon 2018关于 类模板参数推导 在哪里某个点 https youtu be H ut6j1BYU t 941他顺便说 在 C 中 类型信息几乎永远不会向后流动 我不得不说 几
  • 如何在Phone类库项目中添加ResourceDictionary并访问它

    我正在开发一个项目 其中我有一个引用图书馆项目的子项目 在我的库项目 电话类库 中 如何创建 ResourceDictionary xaml 其中我需要添加一些样式并在 xaml 文件和 cs 文件中使用它 我需要访问 xaml 文件中的
  • Xamarin.Android JmDNS 绑定问题

    我开始研究 Xamarin Android 的 JmDNS 绑定 我设法构建了绑定 但无法从代码中引用它 https github com ytn3rd monodroid bindings tree master JmDNS https
  • PARITY_NONE 是 C++ Windows 中的关键字吗?

    我正在使用 boost 编写一个串行库 并且我有一个枚举 enum parity t PARITY NONE PARITY ODD PARITY EVEN 我收到如下错误 错误 1 错误 C2059 语法错误 我无法弄清楚问题是什么 然后我
  • 使用 Node.js 访问用 C++ 编写的 SDK

    我有一个用 C 语言编写的 SDK 可以与我的扫描仪设备进行通信 我需要开发一个可以访问扫描仪设备的电子应用程序 我知道有很多库可用于扫描仪 但我想使用这个 SDK 因为它允许我访问设备的完整功能 而且它是由设备制造商提供的 那么 有没有什
  • C 中函数“fgets”的参数太少

    每当我编译这个错误时 我都会收到该错误 但我不知道为什么 我直接从书上抄袭这个 有人可以帮忙吗 include
  • 不兼容的指针到字符转换

    我正在编写一个程序 将卡片值写入 52 个点字符的多维数组中 该程序是一个测试数组 稍后我将其作为函数写入主程序中 在程序中 我通过以下方式初始化 for 循环计数0通过51 我用一个switch语句调制13将卡牌值分配给数组点 但是 我收
  • 如何正确地将十六进制转义添加到字符串文字中?

    当你有C语言的字符串时 你可以在里面直接添加十六进制代码 char str abcde a b c d e 0x00 char str2 abc x12 x34 a b c 0x12 0x34 0x00 这两个示例在内存中都有 6 个字节
  • C# 中的快速字符串解析

    在 C 中解析字符串最快的方法是什么 目前我只是使用字符串索引 string index 并且代码运行合理 但我忍不住认为索引访问器所做的连续范围检查必须添加一些东西 所以 我想知道我应该考虑哪些技术来增强它 这些是我最初的想法 问题 使用
  • 使用 Crypto++ 和 .NET 的 CFB 模式下的 TripleDES

    我正在尝试使用 TripleDES 使用 C 应用程序获得相同的结果 该应用程序具有Crypto https www cryptopp com 和 NET应用程序使用三重DESCryptoServiceProvider https msdn

随机推荐

  • Spring Boot Dubbo Zookeeper(含ZK安装脚本)

    文章目录 Spring Boot Dubbo Zookeeper 含ZK安装脚本 简介 Dubbo Common Provider Consumer Zookeeper Spring Boot Dubbo Zookeeper 含ZK安装脚本
  • FISCO BCOS简介

    FISCO BCOS是由国内企业主导研发 对外开源 安全可控的企业级金融联盟链底层平台 由金链盟开源工作组协作打造 并于2017年正式对外开源 社区以开源链接多方 截止2020年5月 汇聚了超1000家企业及机构 逾万名社区成员参与共建共治
  • 如何在linux服务器部署pgsql,安全版以及可能出现各种问题解决(保姆级教程)

    文章目录 准备 一 安装 二 配置环境变量 1 切换用户 2 修改配置文件 三 建立数据库 四 设置监听 总结 准备 提示 市面上那些在linux服务器部署pgsql好多都是水货 效果良莠不齐 笔者花了两天时间成功部署了pgsql 记录下方
  • 【华为OD机试真题2023B卷 JAVA&JS】非严格递增连续数字序列

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 非严格递增连续数字序列 知识点字符串 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 输入一个字符串仅包含大小写字母和数字 求字符串中包含的最长的非严格递增连续数字序列
  • gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_wireshark分析(传输层,网络层,链路层)...

    wireshark抓包软件总是友善地帮包分层 1 链路层 Ethernet II协议即以太网协议 以太网帧的格式如下 这里的地址指的是MAC地址 每一个网卡对应唯一的MAC 类型指的是IP ARP CRC效验数据是否异常 在wireshar
  • shell脚本-cp命令复制目录报错cp: omitting directory

    cp 复制目录报错 如下 报错原因 cp命令默认是不能复制目录的 需要加参数 解决办法 使用cp r命令进行复制 递归处理 将指定目录下的所有文件与子目录一并处理 拓展 cp语法 cp 选项 参数 a 此参数的效果和同时指定 dpR 参数相
  • Sina实时股票数据接口大全

    From http blog csdn net ablo zhou article details 4283320 实时股票数据接口大全 股票数据的获取目前有如下两种方法可以获取 1 http javascript接口取数据 2 web s
  • 【R语言】期末考试五道题

    question1 setwd G Rexam20174710426 a lt 2 b lt 0 c lt 1 d lt 7 e lt 4 f lt 7 g lt 1 h lt 0 i lt 4 j lt 2 k lt 6 o lt NA
  • 大一python期末复习综合题

    目录 前言 问题1 阶层函数 问题2 文件读取 问题3 嵌套循环 问题4 求最短路径 问题4 1 路径长度 问题4 2 最短路径 问题4 2 1 列表添加元素 问题4 2 2 返回最短路径 问题5 绘图 问题5 1 绘制城市坐标散点图 问题
  • 面试官:说一下SSO 单点登录和 OAuth2.0 的区别

    您好 我是路人 更多优质文章见个人博客 http itsoku com 一 概述 SSO是Single Sign On的缩写 OAuth是Open Authority的缩写 这两者都是使用令牌的方式来代替用户密码访问应用 流程上来说他们非常
  • ibatis的批量增删改

    1 Ibatis的批量添加
  • Multi-Thread Life

    最近一段时间的工作比较有趣 翻译Datasheet 代码调试和讲解 说白了就是写教程 目前已经写好了串口 LCD的驱动讲解 虽然是裸机驱动 无需与OS打交道 但也算得上是驱动开发了吧 so 放弃了开发一个CE驱动的计划 手头的定时器篇马上就
  • python3使用smtplib发送邮件,带xlsx附件

    一 概述 最近在做一个统计报表 需要发送邮件 并带附件的 在之前的文章中 https www cnblogs com xiao987334176 p 10022026 html 已经实现了发送邮件 但是没有实现发送附件功能 二 正式代码 u
  • Android Treble架构学习

    自Android 8 0以来 Google引入了Treble架构 希望对vendor和system分区进行解耦处理 说句不好听的就是aosp soc odm oem 都分开各搞各的 哈哈 期待实现 system进程不加载vendor共享库
  • 【python】详解collections模块中OrderedDict的使用

    很多人认为python中的字典是无序的 因为它是按照hash来存储的 但是python中有个模块collections 英文 收集 集合 里面自带了一个子类OrderedDict 实现了对字典对象中元素的排序 import collecti
  • 亲密关系-【关键对话】-有哪些决定关系的重要议题?

    爱的感觉不来自任何顿悟或哲思 来自日常生活中一场又一场深度沟通 案例 老婆很喜欢一个脱口秀演员 但我非常讨厌 问题怎么解决 重点不在于如何解决这个问题 重点在于 这为什么是个问题 当我们不沟通家庭时间分配问题 某一次加班带来的时间挤占就会成
  • it信息技术草稿

    信息技术介绍 信息技术行业组成 相关职位 深度学习中的泛化之谜如下 为什么使用梯度下降 GD 训练的过度参数化神经网络在真实数据集上泛化得很好 即使它们能够拟合大小相当的随机数据集 此外 在所有适合训练数据的解决方案中 GD 如何找到一个泛
  • STM32F103时钟配置流程

    一般情况下单片机的时钟配置是单片机程序中的第一步 也是很重要的一步 这时候我们需要考虑以下几个问题 1 系统时钟的时钟源用哪个 2 系统时钟频率要多少 3 每个模块的时钟频率要多少 4 如果外部时钟出了问题 这个时候时钟是怎么运行的 下面就
  • 特征工程——归一化处理不适用情况

    哪些机器学习算法不需要做归一化 Normalization 处理 概率模型不需要归一化 因为它们不关心变量的值 而是关心变量的分布和变量之间的条件概率 如决策树 随机森林rf 而像AdaBoost svm Ir KNN KMeans之类的最
  • C++ 模板模板参数

    C 模板模板参数 1 模板模板参数 C 模板的使用一共有以下几种情况 函数模板 类模板 模板参数 成员模板 而本篇介绍模板模板参数 模板参数就是模板的参数 我们一般指定为T类型 实际上可以使用任何的名字 例如指定一个Foo的模板参数 tem