C++ 模板的用法

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

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

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

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

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

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

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

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

主函数

int main()
{
      int a=4, b =5;
      long l1=3333, l2 = 5455;
      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 0;
}

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

template <class T1, class T2, ....>
T1 func(T2, ...)
{
}
时间: 2024-10-05 04:30:19

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

Thymeleaf模板引擎用法总结

Thymeleaf 基本用法总结 一.引用命名空间 <html xmlns:th="http://www.thymeleaf.org"> 在html中引入此命名空间,可避免编辑器出现html验证错误,虽然加不加命名空间对Thymeleaf的功能没有任何影响. 二.输出内容 2.1 <p th:text="#{home.welcome}">Welcome to our grocery store!</p> 说明: 1. th:tex

django入门之模板的用法

1.为什么要使用模板? 看下以前的代码 1 #-*- coding:utf-8 -*- 2 from django.shortcuts import render 3 from django.http import HttpResponse 4 # Create your views here. 5 6 def index(request): 7 return HttpResponse(t.render("<h1>Hello,World!</h1>")) 这里是

jquery.tmpl.js 模板引擎用法

1.0 引入: <script src="/js/jquery.tmpl.min.js"></script> 2.0 模板: <script type="text/x-jquery-tmpl" id="tmpl"> <li> <h5><a href="/news/Detail/${NewsId}">${Title}</a></h5>

类模板的用法

1.格式:template<模板参数表>  (参数可以直接定义默认值) class 类名 { ...}; 其成员函数可以在类外定义. eg: 1 template <class TNO,class TScore=int,int num=10> 2 class S 3 { 4 private: 5 TNO Sid[num]; 6 public: 7 int bel(TScore ascore); 8 void sort(); 9 }; 10 template <class TN

函数模板的用法

1 #include <iostream> 2 3 using namespace std; 4 5 6 template <class t1,class t2> 7 t1 ff(t1 a,t1 b,t2 c) 8 { 9 cout<<a+b<<' '<<c<<endl; 10 return 0; 11 } 12 13 int main() 14 { 15 ff(1,2,3.1); 16 ff(1.2,2.0,'a'); 17 ret

django中模板变量与内置标签以及过滤器

本文参考 官方文档 . 一  模板变量 格式: {{ variable_name }} variable_name   命名规则与变量命名规则类似,允许字符数字下划线,不允许标点. variable_name后面可以跟dot  .  以此来访问变量的属性.查询顺序: 字典查询 属性或者方法查询: 若为方法查询,则要求该方法不需要传入任何参数.调用该方法后,会将该方法返回的结果赋予该变量. 数字索引查询 二  内置标签 格式: {% tag %} 1  block  定义一个可以被子模板覆盖的区域

RazorEngine在非MVC下的使用,以及使用自定义模板

---恢复内容开始--- RazorEngine模板引擎大大的帮助了我们简化字符串的拼接与方法的调用,开源之后,现在在简单的web程序,winform程序,甚至控制台程序都可以利用它来完成. 但如何在使用中调用方法和使用自定义模板呢?来看这样一个例子 1 string str="hello @Model.Name"; 2 string parse=Razor.Prase(str,new {Name="Tom"}); 3 Console.WriteLine(parse

清华论文模板

thuthesis.cls 1 %% 2 %% This is file `thuthesis.cls', 3 %% generated with the docstrip utility. 4 %% 5 %% The original source files were: 6 %% 7 %% thuthesis.dtx (with options: `cls') 8 %% 9 %% This is a generated file. 10 %% 11 %% Copyright (C) 2005

深入浅出Zabbix 3.0 -- 第七章 模板配置与管理

第七章  模板配置与管理 我们在主机中不仅可以添加很多需要监控的指标(即监控项),还可以添加图形.触发器.监控项组.展示屏.Web scenarios和low-level Discovery,如果在每个主机中添加这些对象,尤其是在一个大型环境中,其工作量是不可想象的,何况需要监控的主机有很多具有相同的监控属性,需要重复相同的配置工作,如果手工完成这些配置任务几乎是不可能的.好在Zabbix为我们提供了模板,通过在不同的模板中添加监控项.触发器.图形等配置并应用到任意数量的主机上.当然对于特殊的监