C++ 函数模板与类模板template,以及具体化、实例化

2023-11-06

函数模板:需要创建针对不同参数类型的实现相同功能的不同函数。注:模板不能缩短可执行程序,最终仍是有多个独立的函数定义。

另,若对不同类型的参数执行不同的算法,可以重载模板定义,前提是两函数的特征标不同。

例:template <typename T>    //或者class T

void Swap(T &a, T&b)    //交换

{

        T temp;

        temp=a;

        a=b;

        b=temp;

}


显示具体化:当参数相同不能实现重载时,可以考虑显示具体化。原型和定义以template<>打头。具体化优先于常规模板,非模板函数优先于具体化和常规模板。

例:template <> void Swap<job>(job &j1, job &j2)  //其中job是一种结构名


显示实例化:意思是“不要使用常规模板来生成函数定义,而应使用专门为Int类型显示定义的函数的定义”。以template开头。

例:template void Swap<int> (int a1, int a2)


类模板:调用时将具体的类型作为参数传递给这个类。例如经典的valarray(定义了数组中元素的数值操作)、vector、array。需要在类声明前、类函数定义前以template <class Type>开头,类限定符也要修改为classname<Type>::。

例:

template <class Type>

class Stack

{
private:

        enum {MAX=10};

        Type items[MAX];

        int top;

public:

        Stack();

        ……

}

template <class Type>

Stack<Type>::Stack()

{
        top=0;

}

相比于函数模板,类模板必须显式的提供所需的类型。


类模板中非类型参数/表达式参数:可用于使用模板参数来提供数组的大小。

template <class T,  int n>  //其中n为表达式参数(指定特殊的类型)

例:声明对象:classname<double, 12> example;     //使用double替换T,使用12替换n

注:1.表达式参数可以是整型、枚举、引用或指针。所以double等不合法;

       2.模板代码不能修改参数的值,也不能使用参数的地址。例不能使用n++,&n等;

       3.实例化模板时,用作表达式参数的值必须是常量表达式。

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

C++ 函数模板与类模板template,以及具体化、实例化 的相关文章

随机推荐

  • JavaScript 将数组中具有相同值的对象 取出组成新的数组

    JavaScript 将数组中具有相同值的对象 取出组成新的数组 var arr name 2 id 3 name 2 id 4 name 3 id 5 name 3 id 6 name 1 id 1 name 1 id 2 传入一个数组
  • 基于粒子群优化和引力搜索混合优化算法改进的前馈神经网络(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 Matlab代码实现 4 参考文献 1 概述 本文利用粒子群优化 PSO 和引力搜索算法
  • 计算机云维护是做什么的,IT运维是什么?云时代下的运维人员是怎样的?

    IT运维是当下IT最热门 最具发展的新概念 随着IT建设的不断深入和完善 计算机硬软件系统的运行维护已经成为了各行各业的信息服务部门普遍关注和不堪重负的问题 这是一个随着计算机信息技术的深入应用而产生的新课题 因此如何进行有效的IT运维管理
  • Java网络编程详解

    1 网络编程 1 1计算机网络概述 网络编程的实质就是两个 或多个 设备 例如计算机 之间的数据传输 按照计算机网络的定义 通过一定的物理设备将处于不同位置的计算机连接起来组成的网络 这个网络中包含的设备有 计算机 路由器 交换机等等 其实
  • MyBatis基本操作及概念

    MyBatis 一 Mybatis简介 1 1 什么是Mybatis MyBatis 是一款优秀的持久层框架 它支持自定义 SQL 存储过程以及高级映射 MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作 MyB
  • 手工编译内核驱动模块时安装和添加modules.order

    手工编译内核驱动模块在当前路径下生成 ko insmod可以加载 但实际一般采用cp或者install安装到 lib modules 下面去 但modinfo modprobe是找不到的 还需要把模信息写到modules order文件里
  • 解决Python的AttributeError: module ‘base64‘ has no attribute ‘b64decode‘问题(参数为str类型)

    小编也是一名网络新手 最近在做一道base64解密的题目时 出现了module base64 has no attribute decodestring 的报错提示 网上有很多说法 下面我列举三种方法 大家都可以去试一试 方法如下 1 查看
  • 记一次晚上帮朋友处理文档名称的问题---正则表达式

    通过你的问题让我虎骨了一下正则表达式 因为最近工作很少用到这个知识点 所以记录一下 这个知识在文档处理有很重要的作用 而且功能也特别强大 问题 批处理文档的文件名 处理成要求的格式 用到的技术 正则表达式
  • 前端学习之Ajax

    文章目录 一 客户端与服务器 1 概念 二 URL地址 1 概念 2 URL地址的组成部分 三 分析网页的打开过程 1 理解客户端和服务器的通信过程 2 基于浏览器的开发者工具分析通信过程 四 服务器对外提供了哪些资源 1 网页常见的资源
  • GBase8s BYTE 和 TEXT 数据类型

    GBase 8s BYTE 和 TEXT 数据类型 以及如何以 JDBC API 来操纵这些数据 类型的列 BYTE 数据类型是在不可分的字节流中存储任何数据的简单大对象数据类型 此二进制数 据的示例包括电子表格 数字化的语音模式以及视频片
  • vue中使用事件监听addEventListener()来实现回车登录功能

    在开发中需要做一个点击回车按钮来实现登录的功能 使用到事件监听 事件监听addEventListener 用法 参照文献 菜鸟教程 addEventListener event function useCapture 参数一event 必须
  • Vue基础精讲 —— 规范代码三步走?关于eslint和editorconfig以及precommit的安装和使用

    eslint ESLint 是一个语法规则和代码风格的检查工具 可以用来保证写出语法正确 风格统一的代码 ESLint最初是由Nicholas C Zakas 于2013年6月创建的开源项目 它的目标是提供一个插件化的 javascript
  • 吴恩达深度学习作业_吴恩达深度学习第一部分第二周作业打卡

    1 What does a neuron compute A A neuron computes the mean of all features before applying the output to an activation fu
  • keil不能进调试模式的解决方法

    一 问题现象 平时用烧录器调试程序一直都没问题 突然今天不能调试了 故障提示如下 二 问题分析 尝试过各种解决方法 插拔烧录器 更换烧录器 插拔stm32主机电源 重启keil开发环境 问题依旧 看来问题不应该在主机和烧录器上 最后问题定位
  • spec文件

    spec文件 spec文件是配置规范文件 是RPM软件包编译过程的核心 它说明了软件包如何被配置 打那些补丁 安装哪些文件 安装到哪里 安装过程需要哪些系统级别活动 标签说明 依赖关系 Dependencies BuildRequires
  • 线上项目路由跳转报错 Loading chunk failed

    场景 线上PC端项目点击左侧路由菜单栏进行页面跳转时点击无反应并报错 Loading chunk failed 原因 经查阅资料找出原因 项目使用了路由懒加载 路由懒加载的情况下 访问当前应用进行路由跳转时都是实时动态的从服务器上拉取相应模
  • Python 递归函数返回值为 None 的解决办法

    在使用 Python 开发的过程中 避免不了会用到递归函数 但递归函数的返回值有时会出现意想不到的情况 下面来举一个例子 gt gt gt def fun i i 1 if i lt 5 fun i else return i gt gt
  • 【转载】做好功能测试,这8项必备技能了解一下!

    原文链接 功能测试是测试工程师的基础功 很多人功能测试还做不好 就想去做性能测试 自动化测试 很多人对功能测试的理解就是点点点 如何自己不用心去悟 去研究 那么你的职业生涯也就停留在点点点上了 在这里 我把我对功能测试的理解写下来 那么 功
  • Can not load Open Client,please verify that libct.dll and libcs.dll are in your

    Can not load Open Client please verify that libct dll and libcs dll are in your path Please make sure your version of Op
  • C++ 函数模板与类模板template,以及具体化、实例化

    函数模板 需要创建针对不同参数类型的实现相同功能的不同函数 注 模板不能缩短可执行程序 最终仍是有多个独立的函数定义 另 若对不同类型的参数执行不同的算法 可以重载模板定义 前提是两函数的特征标不同 例 template