C++ 模板类的默认模板参数、模板函数不支持默认模板参数

 

就像标题说的那样:

1、模板类支持默认模板参数、

2、模板函数不支持默认模板参数,这里的模板函数包括全局函数与类成员函数两种。


使用说明一:

[cpp]  view plain copy
  1. //模板类的默认模板参数  
  2. template<class TypeA = intclass TypeB = float>  
  3. class MyClass  
  4. {  
  5. public:  
  6.     TypeA value_A;  
  7.     TypeB value_B;  
  8. public:  
  9.     MyClass(TypeA valA,TypeB valB)  
  10.     {  
  11.         value_A = valA;  
  12.         value_B = valB;  
  13.     }  
  14.     MyClass(){}  
  15.     ~MyClass(){}  
  16.     TypeA GetValueA()  
  17.     {  
  18.         return value_A;  
  19.     }  
  20.     TypeB GetValueB();  
  21.   
  22.     //类成员函数模板  
  23.     template<typename T>  
  24.     void MemberFuntion(T Tval)  
  25.     {  
  26.         cout<<"成员函数模板的类型名: "<<typeid(T).name()<<endl;  
  27.         cout<<"模板成员函数的值: "<<Tval<<endl;  
  28.     }  
  29. };  
  30.   
  31. //默认模板参数的类模板成员函数类外定义方式,在定义这里就不用再声明默认模板参数类型了  
  32. template<class TypeA,class TypeB>  
  33. TypeB MyClass<TypeA,TypeB>::GetValueB()  
  34. {  
  35.     return value_B;  
  36. }  

主函数的调用:

[cpp]  view plain copy
  1. MyClass<> cls(1,2.0f); //因为已经是默认的模板参数了,所以可以不用在实例化类的时候声明类型,但是尖括号是必须要有的  
  2. cout<<cls.GetValueA()<<endl;  
  3. cls.MemberFuntion<float>(11.0f); //成员函数的模板声明方式  

运行的结果是:


使用说明二:
对于主函数还可以这么调用:

[cpp]  view plain copy
  1. MyClass<char,char> clsch('z','l');  //这里主动声明了类模板的参数类型,覆盖了原有的默认模板参数类型  
  2. cout<<"value_A的值: "<<clsch.GetValueA()<<endl;  
  3. cout<<"value_B的值: "<<clsch.GetValueB()<<endl;  
  4. clsch.MemberFuntion<>("hello");  //可以不声明成员函数的模板类型,因为可以根据传进去的参数类型进行匹配模板参数类型。但如果函数没有参数的话,又没有显示的声明类型,那么在静态编译阶段就不能确定模板参数类型,会抛错。  


运行结果:


说明:"hello"的默认类型是常量指针(指向常量字符串的指针),因为一个字符串是被当做是一个常量对待的,存储于常量区。


使用说明三:

[cpp]  view plain copy
  1. //类成员函数模板  
  2. template<typename T = int>  
  3. void MemberFuntion(T Tval)  
  4. {  
  5.     cout<<"成员函数模板的类型名: "<<typeid(T).name()<<endl;  
  6.     cout<<"模板成员函数的值: "<<Tval<<endl;  
  7. }  

如果在成员函数模板中默认模板参数,那么会抛错:error C4519: 仅允许在类模板上使用默认模板参数。

示例代码:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隨意的風

如果你觉得有帮助,期待你的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值