c++模板与泛型编程

2023-10-31

函数模板

template <typename T>
inline T const& Max (T const& a, T const& b) 
{ 
    return a < b ? b:a; 
} 

调用函数时,编译器会进行实参推到,由传入的参数推断类型T,不用手动输入。

类模板

template <class T>                         // class T 和 typename T 表示一个意思
class Stack { 
private: 
    vector<T> elems;     // 元素 
public: 
    void push(T const&);  // 入栈
    void pop();               // 出栈
    T top() const;            // 返回栈顶元素
}; 
template <class T>
void Stack<T>::push (T const& elem) 
{ 
    elems.push_back(elem);    
} 

模板特化

上述类模板为泛化(generic)的类模板如果一个类模板对某个特定类型有特殊的处理方法时可以再为该类型写一个特化(specialization)的类模板
全特化模板:

template <>
class Stack<int>
{};

当传入的类型参数为特化的参数类型时调用特化模板,为其他类型时调用泛化模板。
当类模板有多个类型参数时,对其中某个类型参数为特定类型有特殊处理方法时可以使用偏特化(partial speciaization)的类模板

//泛化:
template <class T ,class Alloc=alloc >           //第二个模板参数带有默认值,意义和函数参数的默认值一样
class vector
{};
偏特化:                                                                               
template<class Alloc=alloc >
class vector<bool, Alloc>
{};

泛型编程

Templates 及泛型编程的世界,与面向对象有根本上的不同。在此世界中显式接口和运行期多态仍然存在,但重要性降低。反倒是隐式接口(implicit interfaces)和编译期多态(compile-time polymorphism) 移到前头了。

”运行期多态”和“编译期多态”之间的差异,因为它类似于“哪一个重载函数该被调用”(发生在编译期)和“哪一个virtual 函数该被绑定” (发生在运行期)之间的差异。

相关扩展:模板为什么不支持分离式编译

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

c++模板与泛型编程 的相关文章

  • 是否有与 posix_memalign 对应的 C++ 版本?

    当我打电话时posix memalign http man7 org linux man pages man3 posix memalign 3 html为类型的对象分配对齐的内存Foo在我的 C 代码中 我需要做一个reinterpret
  • 使用 lambda 表达式注册类型

    我想知道如何在 UnityContainer 中实现这样的功能 container RegisterType
  • 如何从 C# 中的 dataTable.Select( ) 查询中删除单引号?

    所以我有一个经销商名称列表 我正在我的数据表中搜索它们 问题是 一些傻瓜必须被命名为 Young s 这会导致错误 drs dtDealers Select DealerName dealerName 所以我尝试替换字符串 尽管它对我不起作
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • 使用可变参数包类型扩展的 C++ 函数调用者包装器

    我绑定了一些 API 并且绑定了一些函数签名 如下所示 static bool WrapperFunction JSContext cx unsigned argc JS Value vp 我尝试将对象和函数包装在 SpiderMonkey
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str
  • 不区分大小写的字符串比较 C++ [重复]

    这个问题在这里已经有答案了 我知道有一些方法可以进行忽略大小写的比较 其中涉及遍历字符串或一个good one https stackoverflow com questions 11635 case insensitive string

随机推荐

  • 手机如何连接VMware虚拟机中的服务器

    手机如何连接VMware虚拟机中的服务器 由于没有服务器 于是在自己的虚拟机中CentOS 7中安装hadoop中 用手机看是否能否登陆hadoop管理界面 环境 android手机 Windows 10 x64笔记本 VMware Wor
  • Python爬虫学习遇到的问题

    老猿在学习Python中爬虫知识时遇到了如下问题 爬取网页内容后写入文件报错UnicodeEncodeError gbk codec can t encode的问题解决方案 urllib request urlopen req read d
  • vue+element-UI+vue-elemnt-admin实现导入Excel(有图),并table动态回显

    vue element UI vue elemnt admin实现导入Excel 有图 并table动态回显 一 view 1 导入Excel 2 table动态回显数据 区分图片格式 对boolean类型的数据回显成中文 是 否 二 js
  • 开发web服务程序

    开发web服务程序 1 概述 开发简单 web 服务程序 cloudgo 了解 web 服务器工作原理 任务目标 熟悉 go 服务器工作原理 基于现有 web 库 编写一个简单 web应用类似 cloudgo 使用 curl 工具访问 we
  • Linux运维必备的13款实用工具,你用过吗?

    本文介绍几款 Linux 运维比较实用的工具 希望对 Linux 管理员有所帮助 1 查看进程占用带宽情况 Nethogs Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽 下载 http sourceforg
  • sessionStorage存储

  • todo:在此放置对话框控件_WinCC报警控件、在线趋势/表格控件数据查询

    1 报警控件数据查询 在WinCC报警记录组态时 我们可以给报警消息定义不同的类别 类型 用户文本块等 有了以上的组态 我们就可以自定义过滤条件 在报警控件中查询或显示分类的报警信息 1 1 报警控件手动查询 在组态报警控件时 可直接设置报
  • 将10进制小数转换为IEEE754浮点数格式

    将十进制数 20 625 转换为IEEE754单精度浮点数格式 步骤 20 625 10100 101 1 0100101 2 4 移码 4 127 131 1000 0011 符号 0 尾数 01001010000000000000000
  • python下快速使用echart

    所需文件如图 echarts min js 可以在echarts官网 下载 中找到 app py from flask import Flask render template app Flask name app route def ec
  • GD32+EEPROM(IO)

    一 测试环境 1 芯片 GD32F10x 2 EEPROM BL24CM1A 3 SCL引脚 推完输出 硬件没上拉 4 SDA引脚 浮空输入 硬件没上拉 二 功能 1 使用IO模拟的方式 实现读写EEPROM 三 问题描述 1 很久没有调试
  • 零基础自学Python数据分析之安装、使用等

    这两年Python之火 不再赘述 当然 一些教培机构的吹捧赞美之词可能略高了 实在不敢苟同 但 本人前面也写过Python的功能之强大 用法之多之广以及抑制不住的赞美之情溢于言辞之间 前两天听到一个调侃 说有一个哥们以前是做数据分析的 每天
  • idea右键建包无package(无class等之类的同样适用)

    Intelidea创建好项目之后 右键新建Java class的时候发现没有改选项 只有以下几个选项 把src目录设为源码目录 首先打开Project Structure 如果有test测试文件夹就选中然后点Test按钮 最后点击OK完成
  • Taro和uniapp的区别?

    最近这段时间 因为工作需要 学习认识了taro 因为以前也用过uniapp 因此也对这两款跨端开发框架做了一些对比 总结如下 1 体积不同 Taro使用esbuild打包 虽然打包速度提升 但是打包后体积还是大 uniapp使用vite打包
  • MongoDB(Roboit3T)中导出集合数据

    C MongoDB bin mongoexport d MES LOCAL c Employee o C Employee json 这里导出的是MES LOCAL数据库下的 Employee文档 一 先从数据库中导出文档 平板中的数据 导
  • awk与shell之间的变量传递方法

    http renyongjie668 blog 163 com blog static 16005312011829102025222 在linux下awk是个好东东 处理一些文本文件会非常方便 而在Linux下嘛 经常会和shell打交道
  • GB2312编码规则与代码实现

    GB2312编码范围 A1A1 FEFE 其中汉字编码范围 B0A1 F7FE 汉字编码 第一字节0xB0 0xF7 对应区号 16 87 第二个字节0xA1 0xFE 对应位号 01 94 GB2312编码是第一个汉字编码国家标准 是由中
  • BaseAdapter几个重载方法介绍isEnabled,getViewTypeCount ,getItemViewType

    http blog csdn net nullreference article details 7912588 public boolean isEnabled int position 如果列表的一项item是separator 充当分
  • Redisson Map踩坑姿势

    使用Java的Redisson客户端时 踩了一些坑 分享再次 供大家参考 因此引发的一次故障及排查过程参见 记一次线上 内存泄露 故障 RMapCache的坑 RMapCache的坑要从Redisson中Map结构的元素淘汰机制说起 详见
  • (python)牛客网(华为机试一)——入门

    本博客为博主解题的部分记录 由于均为自己写的 所以答案并非最优解 有很多地方可以优化 其他题解合集 python 牛客网 华为机试二 简单 python 牛客网 华为机试三 中等 python 牛客网 华为机试四 较难 题目 HJ17 取近
  • c++模板与泛型编程

    函数模板 template