Toriyung

导航

模板

顾名思义,就是如果存在同样功能但数据类型不同的函数或者类,分别写出不同的定义很冗余,所以将数据类型用一个记号统一表示(参数化),把这些不同函数(或者不同类)给统一成一个模板,这就是数据类型参数化

 

 

函数模板

  .h文件

template<typename T>
T func1(T a)
{
    //函数功能
}

定义如上,使用template和typename关键字,表示这是一个模板,T代表任意的数据类型

  .cpp文件

int main()
{
    int b=0;
    int a = func1(b);
    return 0;  
}    

使用如上,函数模板会自动识别类型

 

类模板

  .h文件

template<typename T>
class Myclass
{
public:
  Myclass();
  T func1();
}

template<typename T>
T Myclass<T>::func1();

定义如上,不同的是,类模板的类函数定义时,类名需要加上<T>

 

  .cpp文件

int main()
{
    Myclass<double> a;
}

 

 

*模板的定义和实现一般来说一起写在头文件 ,如果分开写则会导致编译不通过。另外一种方法是在实现模板所在的cpp文件进行实例化

如例子:

// 2.h
#pragma once



template<typename T>
T func1(T a, T b);


//2.cpp
#include "2.h"

template<typename T>
T func1(T a, T b)
{
    return a + b;
}


template int func1<int>(int,int);
template float func1<float>(float, float);


//main.cpp


#include<iostream>
#include "2.h"

int main()
{
    int a = 1, b = 2;
    float c = 1.0, d = 2.0;
    int f1 = func1(a, b);
    float f2 = func1(c,d);

    return 1;
}

主函数用到int和float型的实例,而模板在2.h中定义,在2.cpp中实现,则需要在2.cpp中分别实例化<int>和<float>

template int func1<int>(int,int);
template float func1<float>(float, float);

 

posted on 2023-09-10 13:59  Toriyung  阅读(4)  评论(0编辑  收藏  举报