模板类的默认模板参数、模板函数不支持默认模板参数
来源:互联网 发布:国二c语言题库 编辑:程序博客网 时间:2024/05/29 02:44
在这个学期开始学习使用模板,当然模板早在大一期间就用到了一些,但是都是作为练习语法用的。这个学期中使用了大量的模板来进行类的设计与实现,具体的来说应该几乎是这个学期的所有的C++代码都是用的模板实现的吧。有些即使没那么大的使用模板价值,但是还是为了积累模板的经验而硬使用了模板。写了这么多的模板后,也就是在上个星期才偶尔在一个帖子里看到默认模板参数这个概念,写了那么多的代码了才知道这个概念感觉很羞愧啊,就去学习了学习。其实这个如果对照普通类型的默认变量来看待,其实也是不难理解的。
就像标题说的那样:模板类支持默认模板参数、模板函数不支持默认模板参数,这里的模板函数包括全局函数与类成员函数两种。
使用说明一:
//模板类的默认模板参数template<class TypeA = int, class TypeB = float>class MyClass{public:TypeA value_A;TypeB value_B;public:MyClass(TypeA valA,TypeB valB){value_A = valA;value_B = valB;}MyClass(){}~MyClass(){}TypeA GetValueA(){return value_A;}TypeB GetValueB();//类成员函数模板template<typename T>void MemberFuntion(T Tval){cout<<"成员函数模板的类型名: "<<typeid(T).name()<<endl;cout<<"模板成员函数的值: "<<Tval<<endl;}};//默认模板参数的类模板成员函数类外定义方式,在定义这里就不用再声明默认模板参数类型了template<class TypeA,class TypeB>TypeB MyClass<TypeA,TypeB>::GetValueB(){return value_B;}
主函数的调用:
MyClass<> cls(1,2.0f); //因为已经是默认的模板参数了,所以可以不用在实例化类的时候声明类型,但是尖括号是必须要有的cout<<cls.GetValueA()<<endl;cls.MemberFuntion<float>(11.0f); //成员函数的模板声明方式
运行的结果是:
使用说明二:
对于主函数还可以这么调用:
MyClass<char,char> clsch('z','l'); //这里主动声明了类模板的参数类型,覆盖了原有的默认模板参数类型cout<<"value_A的值: "<<clsch.GetValueA()<<endl;cout<<"value_B的值: "<<clsch.GetValueB()<<endl;clsch.MemberFuntion<>("hello"); //可以不声明成员函数的模板类型,因为可以根据传进去的参数类型进行匹配模板参数类型。但如果函数没有参数的话,又没有显示的声明类型,那么在静态编译阶段就不能确定模板参数类型,会抛错。
运行结果:
说明:"hello"的默认类型是常量指针(指向常量字符串的指针),因为一个字符串是被当做是一个常量对待的,存储于常量区。
使用说明三:
//类成员函数模板template<typename T = int>void MemberFuntion(T Tval){cout<<"成员函数模板的类型名: "<<typeid(T).name()<<endl;cout<<"模板成员函数的值: "<<Tval<<endl;}
如果在成员函数模板中默认模板参数,那么会抛错:error C4519: 仅允许在类模板上使用默认模板参数。
更多请看C++标准勘误:C++标准核心语言缺陷报告
- 模板类的默认模板参数、模板函数不支持默认模板参数
- C++ 模板类的默认模板参数、模板函数不支持默认模板参数
- 模板类的默认模板参数、模板函数不支持默认模板参数
- 模板函数的默认模板参数
- 模板默认参数
- 模板类默认参数,模板类的特化,偏特化, 模板成员函数,模板的专用化例子
- 重载函数,默认参数,函数模板
- C++模板(3) - 模板与默认参数
- C++11之模板别名&函数模板的默认模板参数
- c++函数模板,有默认参数的函数
- 模板的模板参数
- C++11 学习笔记 模板的细节(右尖括号,using,函数模板默认参数)
- C++11中sizeof运算符,friend,final,override,模板函数的默认模板参数
- C++函数默认参数, 函数重载, 函数模板
- C++函数其他(重载、默认参数、内联、函数模板)
- 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器
- C++之:模板元编程(三) 默认模板参数
- 模板类型的模板参数
- vlc windows 编译文档
- Flat Shading (平面着色)
- C++中如何打印调用栈
- IOS开发中常量的处理
- 2012,阳光照进现实
- 模板类的默认模板参数、模板函数不支持默认模板参数
- Oracle 11gR2 RAC 常用维护操作 说明
- Phong shading(补色渲染)
- spring 整合struts2 action参数设置不上
- RGB和HSB转换
- 一个程序明白Javascript绘图
- hash表冲突解决方法
- ARM中断控制寄存器介绍(1)
- 一个经典的类似Photoshop的Javascript画板实现