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

    函数模板是通用的函数描述,也就是说,它们使用泛型来定义函数,其中的泛型可用具体的类型(如int或者double)替换。通过将类型作为参数,传递给模板,可使编译器生成该类型的函数。

    函数模板允许以任意类型的方式来定义函数。例如,可以这样建立一个交换函数的模板:

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

      模板并不创建任何函数,而只是告诉编译器如何定义函数。上面代码的关键字typename和关键字class都是可以的,但是推荐使用关键字typename。

    要让编译器知道程序需要一个特定形式的交换函数,只需要在程序中使用Swap()函数即可。编译器将检查所使用的参数类型,并生成相应的函数。

    #include <iostream>
    template <typename T>
    void Swap(T &a, T &b);
    
    using namespace std;
    
    int main()
    {
    	int i = 10;
    	int j = 20;
    	Swap(i, j);
    	cout << "i = " << i << endl;
    	cout << "j = " << j << endl;
    
    	double x = 24.5;
    	double y = 30.7;
    	Swap(x, y);
    	cout << "x = " << x << endl;
    	cout << "y = " << y << endl;
    
    	return 0;
    }
    
    template <typename T>
    void Swap(T &a, T &b)
    {
    	T temp;
    	temp = a;
    	a = b;
    	b = temp;
    }

    函数模板不能缩短可执行程序,如上面的代码,最终仍将由两个独立的函数定义,并且最终的代码并不包含任何的模板,而只包含了程序生成的实际函数。使用模板的好处是,它使生成多个函数定义更简单、更可靠。

    但是:同一个函数模板,只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用该函数模板。但是可以重载的函数模板。

     http://www.cnblogs.com/lidan/archive/2012/02/04/2338677.html

  • 相关阅读:
    P4068 [SDOI2016]数字配对
    牛客挑战赛43 集合操作
    codefoces 1393D Rarity and New Dress
    codefoces 1400E Clear the Multiset
    [TJOI2017]城市 树形dp
    codefoces 1407E Egor in the Republic of Dagestan
    codefoces 1407D Discrete Centrifugal Jumps
    java保留两位小数(四舍五入和非四舍五入)
    JAVA在命令行进行输入输出重定向(JAVA SentinelValue)
    分治法(排列问题)
  • 原文地址:https://www.cnblogs.com/stemon/p/4593106.html
Copyright © 2011-2022 走看看