在计算机程序设计领域,为了避免因数据类型的不同,而被迫重复编写大量相同业务逻辑的代码,人们发展的泛型及泛型编程技术。

那么,什么是泛型呢?本节就带领读者深度剖析一下这个问题。

所以泛型,实质上就是不使用具体数据类型(例如 int、double、float 等),而是使用一种通用类型来进行程序设计的方法,该方法可以大规模的减少程序代码的编写量,让程序员可以集中精力用于业务逻辑的实现。

为了更好地说明使用具体数据类型有多么麻烦,这里先举个例子,假设客户需要一个函数,功能是返回两个 int 类型数据中较大的那个,很多读者自然而然会编写如下代码:

int maxt(int x, int y) { return (x > y) ? x : y; }

可是没过几天,该用户又提出需要编写一个返回两个 double 类型数据中较大的那个,于是我们需要之前的代码进行修改:

double maxt(double x, double y) { return (x > y) ? x : y; }

之后,该用户又提出需要再编写一个能返回两个 char 类型数据中较大的那个…。可以看到,只是因为数据类型不同,就迫使我们不得不把具有相同功能的代码写了若干遍,这样的实现方法简直令人崩溃。

为了解决类似的问题,有聪明的人将代码修改成如下的样子:

T maxt(T x, T y) { return (x > y) ? x : y; }

如此,当用户需要某个数据类型的 maxt 函数时,我们只需要把其中的 T 替换成用户需要的实际数据类型就行了。

那么,代码中的 T 是什么呢?很明显,这是一个占位符,更确切的说是一个类型占位符。也就是说,将来在 T 这个位置上的是一个真实、具体的数据类型,至于到底是哪个类型,完全取决于用户的需求。

当然,如果硬要给 T 这种类型占位符也叫做一种数据类型,提供这种想法的发明者称它为泛型(generic type),而使用这种类型占位符的编程方式就被称为泛型编程。

值得一提的是,既然泛型并不是真实的数据类型,那么使用泛型编写的代码也就不是真正的程序实体,只能算是一个程序实体的样板。故此,通常形象的将这种使用了泛型的代码称为模板,由模板生成实际代码的过程称为模板的具体实现。

注意,类型占位符的替换工作,不需要人为操控,可以完全交由计算机来完成,更准确的说,是交由编译器在编译阶段来完成模板的具体实现。

总之一句话,泛型也是一种数据类型,只不过它是一种用来代替所有类型的“通用类型”。在 中,用以支持泛型应用的就是标准模板库 ,它提供了 C++ 泛型设计常用的类模板和函数模板。

有关 STL 模板库,由于不是本节重点,这里不再赘述,后续章节会做详细介绍。

php 泛型编程,泛型是什么,C++泛型编程又是什么?相关推荐

  1. 泛型参数怎么new_泛型编程,你不知道?(基础篇)

    关注"杜明c",每天进步一点点! 我们学习C++,就常常有人提起泛型编程,什么是泛型编程?我就给大家简单聊一聊. 摘要 - 什么是泛型编程 为什么使用泛型编程 使用方法 什么是泛型 ...

  2. 【C++ 泛型编程 进阶篇】 C++ 泛型编程 模板与异常处理、模板与友元之间的使用

    这里写目录标题 1. 简介 1.1 模板的基础理念 1.2 异常处理的基础理念 2. 模板与异常处理 2.1 异常处理在模板中的基本应用 2.1.1 为模板函数/类添加异常处理 2.1.2 使用noe ...

  3. C++ 泛型编程(五) 模版重载与特例化

    前文回顾: C++ 泛型编程(一) 基本概念 C++ 泛型编程(二) 函数模版 C++ 泛型编程(三) 模版实参推断 C++ 泛型编程(四) 类模板 模版重载 函数模版可以被另一个模版或者一个普通非模 ...

  4. ios开发循环网络请求_GitHub - JadenTeng/ResourceX: iOS网络请求,网络泛型编程,工具类的封装,基于AFNetworking 实现, NSCache数据缓存...

    ResourceX 通过AFNetworking.YYModel 解析网络泛型编程简化网络请求 现如今,网络通信几乎涉及每一个app程序.对于绝大多数请求HTTP API的方法,它们的执行流程都可以分 ...

  5. C++编程之模板与泛型

    模板是一种对类型进行参数化的工具,模板是泛型编程的基础,而泛型编程指的就是编写与类型无关的代码,是C++中一种常见的代码复用方式.模板分为模板函数和模板类:模板函数针对参数类型不同的函数:模板类主要针 ...

  6. 【小白学习C++ 教程】十五、C++ 中的template模板和泛型

    @Author:Runsen template模板在 C++ 中一个简单但非常强大的工具.简单的想法是将数据类型作为参数传递,这样我们就不需要为不同的数据类型编写相同的代码. C++ 添加了两个新关键 ...

  7. java 泛型 extends 多个

    http://blog.csdn.net/chjttony/article/details/6801406 1.泛型边界: Java泛型编程时,编译器忽略泛型参数的具体类型,认为使用泛型的类.方法对O ...

  8. 泛型模板和STL语法入门

    泛型模板和STL语法入门 STL简介 STL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov. ...

  9. Java技术——Java泛型详解

    1.为什么需要泛型 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52230032 泛型在Java中有很重要的地位,网上很多文章罗列各 ...

  10. 一派胡言!Swift 不是多范式函数式编程语言

    来源 | Cocoaphony 译者 | 苏本如,责编 | 夕颜 封图 | CSDN下载自视觉中国 出品 | CSDN(ID:CSDNnews) 自从Swift问世以来,我一直看到一些奇怪的评论,认为 ...

最新文章

  1. 开启报名丨图神经网络前沿学术研讨会
  2. arduino并口屏_Arduino 驱动串口屏(入门级)
  3. 初识python评课稿_开平方函数 python
  4. python 编码规范
  5. 几个可能会用到的前端库
  6. [导入]Nhibernate学习 资料
  7. does not name a type是什么意思_科普:WSGI 是什么,看完保证懂
  8. 证明CLIQUE(团问题)是NP完全
  9. cad卸载工具_Adobe软件卸载与常见问题解决方案
  10. [原创]佰志达SBO网上商城系统业务框架介绍
  11. node.js+社区儿童预防接种管理 毕业设计-附源码300924
  12. Android开发这么久你竟然还不知道Dropbox?
  13. 前端面试题,速看webP,把握住网页提速小细节!亲测可用!
  14. 小姜的Android之路
  15. 金融系列-会计基础知识
  16. Win10下用Anaconda安装TensorFlow
  17. 2022年临床执业医师资格考试《系统解剖学》习题及答案
  18. JAVA12_12学习总结(JavaScript)
  19. P2P担保的法律探析
  20. 输入圆的半径,求面积

热门文章

  1. Ubuntu18.04设置阿里源
  2. 很详细的讲解什么以及为什么是卷积(Convolution)!
  3. 文字排版中的字号尺寸对照表(清晰、准确(含两个版本对比)、可复制)
  4. 工程学导论——心得体会
  5. ppt五种经典字体组合
  6. 2021大学生搭建阿里云服务器+域名申请流程--教程
  7. 居然可以一键删除微博内容
  8. html英文期刊参考文献,英文参考文献标准格式
  9. 人工智能 ppt_我体验了下人工智能PPT制作平台,这6个功能让我惊喜!
  10. Android仿饿了么加减控件,小程序仿饿了么弹窗式购物车