您的位置:首页 > 其它

c++模版

2016-03-01 10:37 239 查看
C++ 模板一般形式为 :

template<typename T>

T func(T a);

调用时式样 func<T> (inputNumber );

func<T> 作为一个整体

参考网站:http://c.biancheng.net/cpp/biancheng/view/213.html

可以 定义一个模板类:

template <typename T1, typename T2>

class UserDefine

{

public:

T1 value1;

template <typename T3>

T2 function1(T3 input)

{

value1 = input;

}

template <typename T4, typenameT5>

T1 function2(T4 input1, T2 input2);

}

类外实现T1

template<typename T1, typename T2> template<typename T4, typename T5>

T1 UserDefine<T1,T2>::function2(T4,input1, T2 input2)

{

value1 = input1 + input2;

return value1;

}

总结:模板在C++中的用一般格式是将函数名 加了一个<>,如func<>, 同时在申明时以template关键字作区分。但是需要注意的是大致地可以分为如下几类:

1) 不属于任何类的函数模板。使用这类特点的模板时,需要注意的是函数名后应该紧跟<>,如

template <typename T1, typename T2>

T1 function(T1 input1, T2 input2);

调用时仅需注意输入参数的合法性:

T1 a = 1;

T2 b = 3;

T1 c = function(a, b);

而事实上,函数模板的调用规范的形式应该是函数名加尖括号的形式(其中尖括号内的参数决定传入参数的类型):function<int, double>(param1,param2); param1和param2的类型会根据<>内的类型指定首先做一次强制类型转换。在很多场合<>可以省去,看起来就和调用普通函数一样,此时T1,T2的类型是编译器自动根据输入的参数类型确定,如果不符合则会报错;另外一种情况则是输入参数无法指定模板中的T:如

template <typename T1>

T1 function(int param1);

调用这个函数时,如果不在尖括号内显式地指出数据类型,则编译器无法确定数据类型,报错。正确的调用方法是int a = 10;

function<double>(a);

参考网站:http://www.prglab.com/cms/pages/c-tutorial/advanced-concepts/templates.php (这个网站中有些讲解并不完全正确)

2) 模板类中不含带有自身模板的函数

模板类,题外话,定义完类一定要在括号后加一个分号。

这类函数在类中实现的时候,与普通函数一样;在类外实现的时候,需要在类名后加上类似<T>的形式,如: T firstClass<T>::yourFunction();

3) 模板类中含带自身模板的函数

函数在类外实现时,注意类和自身的template都需要指定,如template<typename T1>, template <typename T2> ,实现为如下形式:T1myClass<T>::myFunction(); 调用时跟单独函数一样,如果不能指定参数,则需要手动指定,形式为p->myFunction<int>(); 若编译器能识别,则无需手动指定,形式形如:T1myClass<T>::myFunction(T1 param1), 则调用时,如下形式是可行的:int a =10; p->myFunction(a);

4) 非模板类中带自身模板的函数

这类成员函数自身带模板,但其所在的类不带模板,因此在类外申明的时候,类名不需要加<>, 形式为T1 myClass::myFunction(T1 param1);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: