• C++模板函数


    模板函数的声明

    先来看一个正常声明的函数形式:

    //函数1
    ReturnType func(Type1 x1,Type2 x2,...,Type9 x9)
    {
        return (ReturnType) x;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    对于函数应用模板应该这样声明:

    //函数2
    Template<typename T,typename U> void func(T x1,U x2)
    {
       ....
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    可以看出实际上就是在函数之前加上一个 t y p e n a m e typename typename的声明 T 、 U T、U TU,即:

    Template<typename T,typename U>
    
    • 1

    有了这个 T T T之后,可以在函数的任意一个部分用到它,比如返回值、参数类型、函数内部定义的任何类型如 i n t 、 f l o a t int、float intfloat等。而基于这个模板函数的声明,可以在其上新加函数声明,用于特定类型参数的函数声明。比如:

    //函数3
    Template<> void func<int,float>(int x1,float x2)
    {
        .....
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    之后如果传入的 T T T i n t int int U U U f l a o t flaot flaot,就可以调用这个 f u n c func func函数。

    再说一些比较特殊类型的 T T T,我们之前见到的都是 t y p e n a m e typename typename形式的,然而 T T T也可以是 i n t 、 b o o l int、bool intbool类型的参数。比如声明如下的函数:

    //函数4
    Template<int T,typename U> void func1()
    {
         U b;
         printf("%d",T);
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这个时候如果想要声明特定类型的 f u n c 1 func1 func1参数模板,可以这样声明:

    Template<> void func1<1,int>()//函数5
    {
         printf("这里的T为1!");
     }
    
    • 1
    • 2
    • 3
    • 4

    这个时候如果想要调用这个 f u n c 1 func1 func1,传入的 T T T值必须为 1 1 1.

    模板函数的使用

    如果想要调用函数 4 4 4,需要这样写:

    func1<2,int>();
    
    • 1

    当然也可以省去显示的类型说明,比如调用函数 2 2 2

    func(1,2);
    
    • 1

    这里面就是自动转换类型了。
    如果想要调用特定类型的函数 5 5 5,需要这样写:

    func1<1,int>();
    
    • 1

    如果第一个参数不是 1 1 1,那么推导不出来函数 5 5 5.

  • 相关阅读:
    人工智能->自然语言处理中->语言模型相关课题研究
    PRT(Precomputed Radiance Transfer【2002】)原理实现
    数据库概论(简单介绍)
    正则系列之正则表达式可选参数
    oracle入门笔记一
    最新测试技术:使用状态迁移法设计自动化驾驶测试用例
    Apifox:满足你对 Api 的所有幻想
    理解HTTP、HTTPS、TCP、UDP与OSI七层模型:网络访问的基础
    11_printf函数移植串口通信
    CarSim仿真高级进阶(二)---VS 命令行(2)
  • 原文地址:https://blog.csdn.net/weixin_52205764/article/details/133892693