c++ 模板--包含本身就是模板的参数
来源:互联网 发布:wow.duowan.com数据库 编辑:程序博客网 时间:2024/06/03 20:15
模板可以包含类型参数(如typename T)和非类型参数(如 int n)。模板还可以包括本身就是模板类的参数。这种参数是模板新增的特性,用于实现STL。
模板参数格式为 template<typename T>class Thing .
而模板参数为 类模板 ,也是泛型编程的目的。试想一下,在一个类中,可调用一个系列的类,是不是很酷?只要这一个系列的类都有着我们需要的特征,那么我们就能通过使用一个模板类来使用它们,重用代码!
模板参数的格式为template<typename T>class Thing. 其中, template<typename T>class 为类型, Thing为参数。
我被这句话搞混了好一会儿。MB,直接跟我说怎么理解它不就得了。我们逆向去理解它。记住它是一个模板类,它的格式应为
<typename T>
class Thing{...};
C++除了STL思想外,其它都是狗屁。(C程序员)
我没做注释,不好意思了啊。
模板参数格式为 template<typename T>class Thing .
我们使用模板,就是为了泛型编程,如使用类型参数 typename T,就能实现相同算法下不同类型参数的统一编程。
而模板参数为 类模板 ,也是泛型编程的目的。试想一下,在一个类中,可调用一个系列的类,是不是很酷?只要这一个系列的类都有着我们需要的特征,那么我们就能通过使用一个模板类来使用它们,重用代码!
模板参数的格式为template<typename T>class Thing. 其中, template<typename T>class 为类型, Thing为参数。
我被这句话搞混了好一会儿。MB,直接跟我说怎么理解它不就得了。我们逆向去理解它。记住它是一个模板类,它的格式应为
<typename T>
class Thing{...};
对比上面的格式,推测出 只要某个 模板类 的模板参数为<typename T>,那么这个模板类就可以作为 该 模板 的参数。
C++除了STL思想外,其它都是狗屁。(C程序员)
既然那么有用,咱这些coder也来学习一下吧。贴上代码,大家好好理解一下。
/* stacktp.h */#ifndef STACKTP_H_#define STACKTP_H_template <class Type>class Stack{private:enum {MAX = 10};Type items[MAX];int top;public:Stack();bool isempty();bool isfull();bool push(const Type & item);bool pop(Type & item);};template <class Type>Stack<Type>::Stack(){top = 0;}template <class Type>bool Stack<Type>::isempty(){return top == 0;}template <class Type>bool Stack<Type>::isfull(){return top == MAX;}template <class Type>bool Stack<Type>::push(const Type &item){if(top < MAX){items[top++] = item;return true;}elsereturn false;}template <class Type>bool Stack<Type>::pop(Type & item){if(top > 0){item = items[--top];return true;}elsereturn false;}#endif
/* main.cpp */#include<iostream>#include"stacktp.h"using namespace std;template <template <typename T> class Thing>class Crab{private:Thing<int> s1;Thing<double> s2;public:Crab(){};bool push(int a, double x){return s1.push(a) && s2.push(x);}bool pop(int &a,double &x){return s1.pop(a) && s2.pop(x);}};int main(){Crab<Stack> nebula;int ni;double nb;cout<<"Enter int double pairs,such as 4 3.5(0 0 to be end):\n";while(cin >> ni >> nb && ni>0 && nb > 0){if(!nebula.push(ni,nb))break;}while(nebula.pop(ni,nb))cout<< ni <<", "<< nb <<endl;cout<< "Done.\n";return 0;}
我没做注释,不好意思了啊。
0 0
- c++ 模板--包含本身就是模板的参数
- 模板的模板参数
- C语言简单宏函数实现C++模板功能(类型本身作为函数参数)
- 模板的包含模型
- 模板的包含编译
- [C++] 利用模板的模板参数实现单链表
- 模板类型的模板参数
- 混沌 IN C++::模板参数的奥秘
- 模板的包含、继承、重写
- C++的模板参数
- 模板参数的推导
- C++ 模板类型参数
- c++-可变参数模板函数
- 关于模板实例化后的本身的连接问题
- 表达式参数的模板参数
- C++ template - 模板的模板参数
- 模板函数的默认模板参数
- 分区表主键索引分区的前提是包含分区字段或本身就是分区字段
- 【Window】Tor(洋葱头路由)+Privoxy 网络实践(附带Java实例代码)
- shell十三问
- JSTL简介
- iOS国际化---不跟随系统语言
- SIP中From ,Contact, Via 和 Record-Route/Route
- c++ 模板--包含本身就是模板的参数
- responder nextResponder
- 使用python爬取csdn博客访问量
- Android 线程池
- iOSnil崩溃问题
- JAVA操作properties文件
- Ionic基础——动态组件
- all notes
- Java中 == equal hashcode