C++中的高阶手法就会用到泛型编程,主要有函数模板, 在程序中使用模板的好处就是在定义时不需要指定具体的参数类型,而在使用时确可以匹配其它任意类型, 定义格式如下

template <class T>
T func(T ...)
{
}

让我们来看一个简单例子,写一个swap()将两个整数交换位置,

void swap(int &a, int &b)
{
int tmp;
tmp = a;
a = b;
b = a;
return ;
}

如果我们要将两个浮点型数交换,上面那个swap()肯定不适用,因此为我们还得写如下一个交换函数

void swap(float &a, float &b)
{
float tmp;
tmp = a;
a = b;
b = a;
return ;
}

很显然, 上面两段代码除了参数类型不一样,其它的处理方式完全一样,是不是感觉代码的复用性很差,如果我们要交换两个long类型的数呢,没办法,你不得再写一个上面那样的swap(). 还好C++足够智能,它早就为我们提供了一种更灵活的方法来解决上面这种问题,那就是模板。如果引入模板,上述代码可以由下面一断代替

template <class T>
void swap(T &a, T &b) //T 可由任意类型代替,从而达到泛型效果
{
T tmp;
tmp = a;
a = b;
b = a;
return ;
}

主函数

int main()
{
int a=, b =;
long l1=, l2 = ;
float f1=234.53, f2 = 34.552;
swap(a,b); // compiler auto generate a void swap(int &, int &)
swap(l1,l2);
swap(f1,f2); //一个函数可以处理三种类型的参数,这就是模板的魅力
return ;
}

注意, 模板可以同时定义多个参数,如

template <class T1, class T2, ....>
T1 func(T2, ...)
{
}

C++ 模板的用法的更多相关文章

  1. Django中模板的用法简介

    1. 模板系统的介绍 Django作为一个Web框架,其模板所需的HTML输出静态部分以及动态内容插入 模板由HTML代码和逻辑控制代码构成 Django框架的模板语言的语法格式: {{var_nam ...

  2. Thymeleaf 模板引擎用法

    学习.改良.极致 博客园 首页 新随笔 联系 管理 订阅 随笔- 31  文章- 0  评论- 50  Thymeleaf 常用属性   文章主目录 th:action th:each th:fiel ...

  3. c++ 中pair类模板的用法详解

    pair: 头文件:#include<utility> 类模板:template <class T1, class T2> struct pair 参数:T1是第一个值的数据类 ...

  4. django入门之模板的用法

    1.为什么要使用模板? 看下以前的代码 #-*- coding:utf-8 -*- from django.shortcuts import render from django.http impor ...

  5. c++转载系列 std::vector模板库用法介绍

    来源:http://blog.csdn.net/phoebin/article/details/3864590 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作 ...

  6. jquery.tmpl.js 模板引擎用法

    1.0 引入: <script src="/js/jquery.tmpl.min.js"></script> 2.0 模板: <script type ...

  7. Laravel框架中Blade模板的用法

    1. 继承.片段.占位.组件.插槽 1.1 继承 1.定义父模板 Laravel/resources/views/base.blade.php 2.子模板继承 @extends('base') 1.2 ...

  8. js模板引擎用法

    JavaScript模板引擎Template.js使用详解 作者:A_山水子农 字体:[增加 减小] 类型:转载 时间:2016-12-15我要评论 这篇文章主要为大家详细介绍了JavaScript模 ...

  9. [HTML] 模板的用法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta na ...

随机推荐

  1. eval以及时间操作

    1.  在Python里面 val=eval(“1+1”) 只能执行简单的表达式,不能执行有逻辑性的代码.并且能拿到返回值.可以执行字符串的计算: exec() 执行代码: 在JS里面:eval可以实 ...

  2. Hyperledger Fabric 实战(十): Fabric node SDK 样例 - 投票DAPP

    Fabric node SDK 样例 - 投票DAPP 参考 fabric-samples 下的 fabcar 加以实现 目录结构 . ├── app │ ├── controllers │ │ └─ ...

  3. BZOJ1858:[SCOI2010]序列操作——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1858 lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于 ...

  4. finetune on caffe

    官方例程:http://caffe.berkeleyvision.org/gathered/examples/finetune_flickr_style.html 相应的中文说明:http://blo ...

  5. Unresolved import *** (models) error on Eclipse

    Eclipse version: Oxygen.2 Release (4.7.2) Python version: 3.6 问题:系统提示:from django.db import models 语 ...

  6. STL之一:字符串用法详解

    转载于:http://blog.csdn.net/longshengguoji/article/details/8539471 字符串是程序设计中最复杂的变成内容之一.STL string类提供了强大 ...

  7. 监听scrollview

    http://blog.csdn.net/u012527802/article/details/47320009

  8. [mysql]数据库引擎查看

    1.查看数据库引擎 全局下,show engines; 2.察看数据库引擎 show variables like '%engine%'; 或者show create table xxx\G 会显示默 ...

  9. maven中net.sf.json报错的解决方法(转载)

    原文:http://www.cnblogs.com/winner-0715/p/5928514.html 今天在用maven添加net.sf.json的jar包的时候,代码如下: <depend ...

  10. 实现自己的Promise polyfill

    功能清单: Promise.prototype.then() Promise.prototype.catch() Promise.reject() Promise.resolve() Promise. ...