c++模版

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);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值