C++模板函数

模板函数的声明

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

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

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

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

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

Template<typename T,typename U>

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

//函数3
Template<> void func<int,float>(int x1,float x2)
{
    .....
}

之后如果传入的 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);
 }

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

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

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

模板函数的使用

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

func1<2,int>();

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

func(1,2);

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

func1<1,int>();

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

你可能感兴趣的:(c++,开发语言)