C++Primer Plus 第十四章代码重用:14.4.7 成员模板

C++Primer Plus 第十四章代码重用

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:C++Primer Plus 第十四章代码重用:14.4.7 成员模板


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • C++Primer Plus 第十四章代码重用
  • 前言
    • 14.4.7 成员模板
  • 14.4.7 成员模板


前言

提示:这里可以添加本文要记录的大概内容:

14.4.7 成员模板

提示:以下是本篇文章正文内容,下面案例可供参考

14.4.7 成员模板

模板可用作结构、类或模板类的成员。要完全实现STL的设计,必须使用这项特性。程序清单14.20是一个简短的模板类示例,该模板类将另一个模板类和模板函数作为其成员。
程序清单14.20 tempmemb.cpp

//tempmemb.cpp -- template members
#include <iostream>
using std::cout;
using std::endl;
template <typename T>
class beta
{
private:template<typename V> // nested template class member class hold{private:V val;public:hold(V v) : val(v) {}void show() const { cout << val << endl; }V Value() const { return val; }};hold<T> q;		//template object hold<int> n;	//template object
public:beta(T t, int i) : q(t), n(i) {}template<typename U>U blab(U u, T t) { return n.Value() + q.Value() * u / t; };void show() const { q.show(); n.show(); }
};int main()
{beta<double> guy(3.5, 3);cout << "T was set to double.\n";guy.show();cout << "V was set T,which is double,then V was set to int\n";cout << guy.blab(10, 2.3) << endl;cout << "U was set to int.\n";cout << guy.blab(10.0, 2.3) << endl;cout << "U was set to double.\n";return 0;
}

在程序清单 14.20中,hold 模板是在私有部分声明的,因此只能在 beta 类中访问它。beta 类使用 hold模板声明了两个数据成员:

hold<T>q;
hold<int>n;

n是基于 int 类型的 hold 对象,而q成员是基于T类型(beta模板参数)的 hold 对象。在 main()中,下述声明使得T表示的是 double,因此q的类型为hold:

beta<double>guy(3.53);

blab()方法的U类型由该方法被调用时的参数值显式确定,T类型由对象的实例化类型确定。在这个例子中,guy的声明将T的类型设置为 double,而下述方法调用的第一个参数将U的类型设置为int(参数10对应的类型):

cout << guy.blab(102.5)<< endl;

因此,虽然混合类型引起的自动类型转换导致 bab()中的计算以 double 类型进行,但返回值的类型为U(即 int),因此它被截断为28,如下面的程序输出所示:
在这里插入图片描述
注意到调用 guy.blab()时,使用10.0代替了10,因此U被设置为 double,这使得返回类型为 double,
因此输出为 28.2608。正如前面指出的,guy 对象的声明将第二个参数的类型设置为double。与第一个参数不同的是,第二个参数的类型不是由函数调用设置的。例如,下面的语句仍将blah()实现为blah(int,double),并根据常规函数原型规则将3转换为类型double:

cout << guy.blab(103)<< endl;

可以在 beta 模板中声明 hold 类和 blah 方法,并在 beta 模板的外面定义它们。然而,很老的编译器根本不接受模板成员,而另一些编译器接受模板成员(如程序清单 14.20所示),但不接受类外面的定义。然而,如果所用的编译器接受类外面的定义,则在 beta模板之外定义模板方法的代码如下:
上述定义将T、V和U用作模板参数。因为模板是嵌套的,因此必须使用下面的语法:

template <typename T>
template <typename V>

而不能使用下面的语法:

template<typename T,typename V>

定义还必须指出 hold 和 blab 是 beta类的成员,这是通过使用作用域解析运算符来完成的。

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

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

相关文章

KBL410-ASEMI智能AI专用整流桥KBL410

编辑&#xff1a;ll KBL410-ASEMI智能AI专用整流桥KBL410 型号&#xff1a;KBL410 品牌&#xff1a;ASEMI 封装&#xff1a;KBL-4 正向电流&#xff08;Id&#xff09;&#xff1a;4A 反向耐压&#xff08;VRRM&#xff09;&#xff1a;1000V 正向浪涌电流&#xff1a;2…

【计算机毕业设计】基于微信小程序的电子购物系统的设计与实现【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

Python逻辑控制语句 之 判断语句--if语句的基本结构

1.程序执行的三大流程 顺序 分支&#xff08;判断&#xff09; 循环 2.if 语句的介绍 单独的 if 语句,就是 “如果 条件成⽴,做什么事” 3.if 语句的语法 if 判断条件: 判断条件成立&#xff0c;执行的代码…

Python转换图片为BITMAP供OLED屏幕显示

最近在玩ESP32&#xff0c;外接了一个0.96寸的oled屏幕&#xff0c;不想找取模软件了&#xff0c;直接gpt生成代码&#xff0c;小改一下直接用了。 字体下载地址&#xff1a;https://fonts.google.com/selection?queryNotoSans from PIL import Image, ImageDraw, ImageFont…

防止多次点击,vue的按钮上做简易的防抖节流处理

话不多说,上个视频,看看是不是你要的效果 防抖节流 1.创建一个directive.js // directive.js export default {install(Vue) {// 防重复点击(指令实现)Vue.directive(repeatClick, {inserted(el, binding) {el.addEventListener(click, () > {if (!el.disabled) {el.disabl…

Leetcode 450:删除二叉搜索树中的节点

给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。 一般来说&#xff0c;删除节点可分为两个步骤&#xff1a; 首先…

6月29日,每日信息差

第一、位于四川省绵阳市的中广核质子治疗装备制造基地正式通过竣工验收&#xff0c;为全球装机数量和治疗患者数量最多的国际领先质子治疗系统全面国产化奠定了坚实基础。质子治疗作为目前全球最尖端的肿瘤放射治疗技术之一&#xff0c;与传统放疗技术相比&#xff0c;质子治疗…

C#微信预约挂号系统全套源码,适用于各级公立和民营医院,与院内his、lis、pacs系统对接。

C#微信预约挂号系统源码&#xff0c;团队自主研发&#xff0c;三甲医院应用多年&#xff0c;系统稳定&#xff0c;功能齐全&#xff0c;支持二次开发&#xff0c;项目使用。 微信预约挂号系统可以让患者足不出户就可以利用微信进行在线挂号&#xff0c;实现分时段就诊&#xff…

安装llama_factory

第一版&#xff1a; nvidia-smigit clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory/ llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml pip install --upgrade huggingface_hub llamafactory-cli webui llamafactory-cli webui -…

【LLM 评估】GLUE benchmark:NLU 的多任务 benchmark

论文&#xff1a;GLUE: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding ⭐⭐⭐⭐ arXiv:1804.07461, ICLR 2019 Site: https://gluebenchmark.com/ 文章目录 一、论文速读二、GLUE 任务列表2.1 CoLA&#xff08;Corpus of Linguistic Accep…

java输出小写的a-z以及大写的Z-A

如果是C语言&#xff0c;可以直接使用格式化输出中的%c 但是Java没有&#xff0c;所以可以1、强制类型转化&#xff1b;2、for循环递增变量中直接定义为char类型 方法一&#xff1a;强制类型转化 //2024.06.29 public class Homework07{public static void main(String[] arg…

卷积、池化小记

卷积和池化是深度学习中&#xff0c;特别是在卷积神经网络&#xff08;CNN&#xff09;中非常重要的两个概念。下面我将分别详细解释卷积和池化的定义、作用以及常见的类型。 卷积&#xff08;Convolution&#xff09; 1. 定义 卷积是通过两个函数f和g生成第三个函数的一种数…

在晋升受阻或遭受不公待遇申诉时,这样写是不是好一些?

在晋升受阻或遭受不公待遇申诉时&#xff0c;这样写是不是好一些&#xff1f; 在职场中&#xff0c;晋升受阻或遭受不公待遇是员工可能面临的问题之一。面对这样的情况&#xff0c;如何撰写一份有效的申诉材料&#xff0c;以维护自己的合法权益&#xff0c;就显得尤为重要。#李…

STM32CUBEMX配置USB虚拟串口

STM32CUBEMX配置USB虚拟串口 cubemx上默认配置即可。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 配置完后生成工程&#xff0c;主要就是要知道串口的收发接口就行了。 发送&#xff1a;CDC_Transmit_FS()&#xff0c;同时记得包含头文件#include “…

RStudio学习笔记(二):向量

在R语言中&#xff0c;向量类似于数学上的集合概念&#xff0c;由一个或多个元素构成。指用于存储数值型、字符型、逻辑型数据的一维数组。 1、向量的创建 # R语言中向量的创建可以通过函数c()x <- c(1,2,3,4,5) # 存储数值型y <- c("one","two&q…

shopify入门教程-应用开发(二)

4.内网穿透 为什么要用这个&#xff0c;就是把电脑上的开发内容通过内网穿透显示到你的开发店铺上。这里的内网穿透我用了ngrok,花生壳&#xff0c;但都不如shopify官方推荐的cloudflare好用。所以这里我也推荐cloudflare。 运用内网穿透2个步骤 把app运行起来 ​​​​​​​…

YOLO网络结构特点收录

YOLO网络结构特点收录 YOLO&#xff08;You Only Look Once&#xff09;网络结构随着版本迭代不断进化&#xff0c;以下是一些关键版本的网络结构特点概述&#xff1a; YOLOv1 输入&#xff1a;将图像调整至固定尺寸&#xff0c;如448x448像素。骨干网络&#xff1a;初期版本…

java TCP服务器与客户端通信示例

目录 背景: TCP服务代码解析: TCP服务器的代码: 服务器程序的工作流程: TCP客户端代码解析 : TCP客户端代码: 客户端工作流程: 总结: 背景: 如何使用Java编程语言实现一个简单的TCP服务器和客户端。那么TCP是什么?TCP&#xff08;Transmission Control Protocol&…

RocketMQ源码学习笔记:Broker接受消息和发送消息

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Overview2、技术亮点2.1、消息写入时的自旋锁和可重入锁2.2、堆外内存机制2.2.1、Overview2.2.2、源码2.2.2.1、开启堆外内存的条件2.2.2.2、堆外内存的初始化2.2.2.3、写消息到堆外内存2…

MAS0902量产工具分享,MAS0902A开卡教程,MAS0901量产工具下载

MAS0902和MAS1102都是基于SATA3.2技术开发的DRAM-less SSD控制芯片&#xff0c;简单来说就是SATA协议无缓存主控。下面是我摸索的麦光黑金300 240G SSD开卡修复简易教程&#xff0c;也就是MAS0902量产过程&#xff1a; 注意&#xff1a;开卡转接线必须要用ASM1153E或JMS578主控…