zoukankan      html  css  js  c++  java
  • 函数模版

    函数模版:

    concepts:

    c++的另一种泛型编程,主要应用技术是模版

    函数模版是模板中的一种

    skills:

    函数模板定义: 

    template<typename T>    //下面紧接着定义一个函数的话就是函数模版   下面紧接着是一个类的话就是一个类模版。

    函数声明或者定义

    template --用来声明这是个模版

    typename --表明其后面的符号是一种数据类型,可以用typename可以用class代替

    T  --通用的数据类型,名称可以替换(26个英文字母随便选),通常为大写字母  可以讲函数的返回值类型和形参的类型进行模板化

    core:

     就是将形参或者返回值类型进行一个通用化。

     自动类型推导必须推导出一致的数据类型才可以使用

    模版必须要确定出T的数据类型才可以使用

    examples:

    #include<iostream>
    #include<string>
    using namespace std;


    //函数模版的实现
    template<typename T>
    void myswaps(T &a, T &b)
    {
    T c = a;
    a = b;
    b = c;
    }


    void main()
    {
    int a=10;
    int b=20;
    double c=40;
    double d=50;
    myswaps(a, b); //自动类型推导
    myswaps<double>(c, d); //指定推导类型
    cout << "a= " << a << "b= " << b << endl;
    cout << "c= " << c << "d= " <<d << endl;
    system("pause");
    return;

    }

    comments:

    //函数模版是一个非常方便的东西,在c++库中就有很多内置的模版直接使用,可以很大程度的提高效率并且减少出错的可能。

    //普通函数和函数模版在隐式类型转换时的区别

    普通函数在调用的时候可以发生隐式类型转换。

    函数模版在自动类型推导情况下进行调用的时候不会发生隐式类型转换

    函数模版在指定类型的情况下会发生隐式类型转换

     //普通函数和函数模版的调用规则

    1,如果普通函数和函数模版都可以调用,优先调用普通函数

    2,也可以通过空模版函数列表强制调用函数模版     //  就是 “指定类型调用” 中的尖括号之内的类型声明设置为空就可以优先调用模版

    3,函数模版也可以发生重载    重载就是函数模版的函数名字是一样的参数不一样而已

    4,如果函数模版可以产生更好的匹配则优先调用函数模版

  • 相关阅读:
    ubuntu中安装monodevelop
    谈谈asp.net中的<% %>,<%= %>,<%# %><%$ %>的使用
    asp.net中的App_GlobalResources和App_LocalResources使用
    cisco通过控制口或者通过远程配置交换机
    匿名函数
    迭代器生成器
    闭包函数,装饰器
    函数之对象和名称空间与作用域
    函数
    文件操作
  • 原文地址:https://www.cnblogs.com/yykyykyyk/p/14071361.html
Copyright © 2011-2022 走看看