zoukankan      html  css  js  c++  java
  • 13--函数模板

    一.C++中的泛型编程

       --- 函数模板

            --- 提供一种特殊函数可用不同类型进行调用

            --- 类型能够被參数化

    template<typename T>
    void Swap(T& a,T& b)
    {
    	T t=a;
    	a = b;
    	b = t;
    } 

        说明: -template keyword用于声明開始泛型编程

               -typename keyword用于声明泛指的类型

       函数模板的应用

         -- 自己主动类型推导调用

         -- 详细类型显示调用

    	int a=1;
    	int b=2;
    	Swap(a,b);// 自己主动类型推导调用 
    	
    	float fa=3;
    	float fb=4;
    	Swap<float>(fa,fb);// 显示类型调用 

       对泛型编程的理解

           --- 编译器并非把函数模板处理成可以处理随意类型的函数

           --- 编译器从函数模板通过详细类型产生不同的函数

           --- 编译器会对函数模板进程两次编译

               --- 在声明的对方对函数模板代码本身进行编译 

               --- 在调用的地方对參数替换后的代码进行编译

    二. 函数模板与重载

        函数模板能够像普通函数一样被重载

        *: C++编译器优先考虑普通函数

        *: 假设函数模板能够产生一个更好的匹配。那么选择模板

        *: 能够通过空模板參数类表的语法限定编译器仅仅通过模板编译

    int Max(int a,int b)
    {
    	return a>b?

    a:b; } template<typename T> T Max(T a,T b) { cout<<"template<typename T>"<<endl; return a>b?a:b; } template<typename T> T Max(T a,T b,T c) { return Max(Max(a,b),c); } int main() { int a=1; int b=2; cout<<Max(a,b)<<endl;// 优先选择普通函数 cout<<Max<>(a,b)<<endl;// 仅仅考虑模板的匹配 return 0; }


      说明:

    	cout<<Max(a,b)<<endl;// 优先选择普通函数 
    	cout<<Max<>(a,b)<<endl;// 仅仅考虑模板的匹配 

    三. 多參数函数模板

        函数模板能够定义随意多个不同的类型模板

    template<typename T1,typename T2,typename RT>
    RT Add(T1 a,T2 b)
    {
    	return static_cast<RT>(a+b);
    }
    
    cout<<Add<char,float,double>('a',100)<<endl;

       将返回值类型參数声明到第一个參数位置。调用时仅仅需显示声明返回类型參数就可以。

    template<typename RT,typename T1,typename T2>
    RT Add(T1 a,T2 b)
    {
    	return static_cast<RT>(a+b);
    }
    cout<<Add<double>('a',100)<<endl;
    

    小结:

        (1) 函数模板事实上是一个具有同样行为的函数家族

        (2) 函数模板能够依据类型实參对函数进行推导调用

        (3) 函数模板能够显示的指定类型參数

        (4) 函数模板能够被重载













  • 相关阅读:
    poj1363Rails(栈模拟)
    centos6.5设备mysql5.6
    SGU326Perspective(网络流量的最大流量)(经典赛车模型)
    扩大或缩小undo表空间
    Boost源代码学习---shared_ptr.hpp
    leetcode
    为客户打造RAC-DG一些遇到的问题汇总
    十归并排序有用的算法和二进制搜索的基础
    Delphi TNativeXML Node节点乱码的一种解决方法
    Delphi TcxTreeList 读取 TcxImageComboBoxItem类型的值
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7200619.html
Copyright © 2011-2022 走看看