C++之模板(template)

原创 2016年06月01日 11:34:26
  模板(template)是C++最为强大的 功能之一,它使得算法的实现无关于数据的类型,使模板能适用于任意一组相关的函数和类。模板的意义是实现数据类型的参数化,提高了代码的重用率。

eg:计算两个数的最大值。

#include<iostream>
using namespace std;
int myMax(int a,int b){
   return a>b?a:b;
}
char myMax(char a,char b){
   return a>b?a:b;
}
double myMax(double a,double b){
   return a>b?a:b;
}
int main(){
    cout<<myMax(5,6)<<endl;
    cout<<myMax('X','h')<<endl;
    cout<<myMax(5.5,6.7)<<endl;
    return 0;
}

输出结果:
这里写图片描述

 你会发现上面像老太太的缠脚布,真是又臭又长。下面我用模板去简化下上面的代码。

#include<iostream>
using namespace std;
template<typename T>
T myMax(T a,T b){
   return a>b?a:b;
}
int main(){
    cout<<myMax(5,6)<<endl;
    cout<<myMax('X','h')<<endl;
    cout<<myMax(5.5,6.7)<<endl;
    return 0;
}

输出结果:
这里写图片描述

  综上你会发现使用模板两个优点:
   1.减少重复代码 
   2.处理目前未知数据 

  实现模板的重要手段就是“数据类型参数化”。分为两个层次:数据的参数化;类型的参数化。所谓参数化就是将具体的数据或数据类型的形式化表示。
  其中template是模板的标识,尖括号部分<class T>是对数据类型形式参数T的说明,关键字class表明它是一个模板形式参数。

  模板分为类模板和函数模板,对于函数模板的定义的语法规则如下:
  (1)所有模板都必须以关键字template开始,关键字template告诉编译器下面的程序代码将会操作多种数据类型。
  (2)以尖括号<>括起来的部分为模板形参列表,在该类表中声明了一个或多个模板形参,若多个模板形参,它们之间用逗号隔开,并且所有的形参前面必须加关键字class或者typename。
  eg:
         template<typename T,typename Q>
         void do_anything(T t,Q q);
  (3)除了模板语法外,普通函数和模板函数的唯一区别就是有表示类型参数的T表示函数形参的类型。

  对于类和结构体也可以带模板。
  eg:
        template<typename T>
        class Poin{
             T x,y;
             point(T x=0,T y=0):x(x),y(y){}//表示把成员变量x,y初始化为参数x,y 
        };      

  结构体和类差异很小,主要区别在默认访问对象和继承方式不同。在工程中一般用struct定义纯数字,包含较少的成员函数;class定义复杂的行为。

  本文只是为了解模板函数和模板类,为能更好的理解(标准模板库)STL做铺垫。
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异

编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异 题目挺绕口的。C++ 11的好东西不算太多,但变参模板(Variadic Template)肯定是其中耀...

gcc #pragma pack c++模板template

gcc4.4.7下编译如下,不知为什么对模板的对齐控制不起效果,遂搜了点对模板的对齐控制相关的 #include #pragma pack(2) template class a{ privat...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

C++函数模板template

本文介绍函数模板template。 简单的说,函数模板的作用是减少不同数据类型但实现相同功能的函数的重复定义。 转载原文地址:http://www.weixueyuan.net/view/5853.h...

c++ template笔记(1)模板函数

二、function template不能有默认模板参数,如下则报错   int c = 10;//定义一个变量,用于作为T2的默认值   //为b设定一个默认参数 te...

【转】<C++ Primer 5th>Template模板笔记

1.模板实例化:C++中的模板是一个函数或者类的蓝图,编写了不局限于类型的通用代码。模板定义本身不参与编译,而是编译器根据模板的用户使用模板时提供的类型参数生成代码,再进行编译,这一过程被称为模板实例...

我所理解的设计模式(C++实现)——模板方法模式(Template Method Pattern)

概述:      我们最近在开发一个支持多种压缩类型文件的解压缩且制作成pdf的一个应用。对我们的架构来说我们需要支持多种压缩文件类型,但却有固定的操作顺序(先解压缩,在读取里面的文件分析、制作pd...

C++ Template 基础篇(四):模板与友元

Template 基础篇-模板与友元Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第四部分。模板与友元的关系非常...

C++之模板类(Template) 容器之map 及 对象副本 深/浅拷贝 等问题

 一般地当我们只想知道一个值是否存在时,set 最有用处;希望存储也可能修改一个相关的值时,map 最为有用.    map提供一个键值对容器,在map(也叫关联数组)中我们提供一个键/值对,...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)