zoukankan      html  css  js  c++  java
  • 函数模板的知识点总结

    1. tempate<typename Anytype>等价于 template<class Anytype>;

    2. 最终代码不包含模板,而是包含了由模板为函数生成的具体函数;

    3. 函数模板的重载:使用不同的特征标,特征标中可以有具体类型,如int,而不是泛型;

    4.具体化包括:隐式实例化,显式实例化,显式具体化,下面看区别:

    ①隐式实例化&显式具体化:

    #include<iostream>
    #include<typeinfo>
    
    using namespace std;
    
    template<typename T>
    void Swap(T& a, T& b);
    
    int main() {
    	int i = 5, j = 6;
    	Swap(i,j);//隐式模板函数实例化
    	cout<<"i:"<<i<<" j:"<<j<<endl;
    	double a = 7.0, b = 8.0;
    	Swap<double>(a,b);//显式模板函数实例化
    	cout << "a:" << a << ",type info of a :" << typeid(a).name() << endl<< "b:" << b<< ",type info of b :" << typeid(b).name() <<endl;
    	
    	return 0;
    }
    
    template<typename T>
    void Swap(T& a,T& b) {
    	T tmp;
    	tmp = a;
    	a=b;
    	b = tmp;
    }
    

     ②具体化不同于实例化。实例化是通过模板函数定义实例对应的具体函数定义的过程;而具体化是为特定类型,提供不同于模板函数定义的具体化操作,看下面这个例子:

    struct job {
    char name[40];
    double salary;
    int floor;
    };
    //显式具体化 template<> void Swap<job>(job &j1,job &j2);xiangdui

      

    参看P287 程序清单,当我们想对job结构中的salary,floor进行交换,而name不交换的时候,那就需要使用显示具体化,来完成不同于模板函数定义的操作;如果使用模板定义进行交换,则name,saraly,floor都会进行交换。

    5. 编译器匹配优先级

    普通函数定义>具体化>模板函数

     编译器如何选择最优匹配函数P289

    6.模板中多个泛型时返回类型的确定

    ①使用decltype;

    ②使用后置返回类型 p297

  • 相关阅读:
    druid的配置
    js学习(五)-全局函数和类内部函数区别
    js学习(四)- prototype原型对象
    js学习(三)-使用大括号({ })语法创建无类型对象
    js学习(一)-动态添加、修改、删除对象的属性和方法
    js学习(一)-对象和函数概念
    js关于函数和对象的概念
    js传递数组到后台
    ubantu一些资料
    fiddler的编程文章
  • 原文地址:https://www.cnblogs.com/liutianrui1/p/13340456.html
Copyright © 2011-2022 走看看