(c++常问问题十四)c++泛型模板
泛型编程就是以独立于任何特定类型的方式编写代码,而模板是泛型编程的基础。
直接上代码吧:
1.模板函数
#include <iostream> #include <sstream> using namespace std; //这是一个参数是模板的函数,别的类型转成string类型 template<typename t2> string convrtToString(const t2& other) { ostringstream ss; ss<<other; return ss.str(); } void main() { //转换 int n = 1000; string str = convrtToString(n) system("pause"); }
结果和想的一样,别的类型转化为string类型
2.模板类(可以用来实现很多数据结构...以及单例类什么的)
#include <iostream> #include <vector> using namespace std; template<class T1> class stack { public: typedef typename std::vector<T1>::iterator iterator; //重写一个迭代器.. iterator begin() { return m_container.begin(); } iterator end() { return m_container.end(); } void push(T1 obj) { m_container.push_back(obj); cout<<"Push Succ"<<endl; } void pop() { if (m_container.empty()) { return; } else { m_container.erase(m_container.begin()); cout<<"Pop Succ"<<endl; } }; private: //偷个懒,哈哈哈 vector<T1> m_container; }; void main() { stack<int> s; s.push(1); s.push(2); stack<int>::iterator it = s.begin(); for (;it != s.end();++it) { cout<<*it<<endl; } system("pause"); }
上面例子轻松的实现了一个支持迭代器的堆栈数据结构,cocos2dx也通过这样的包装来实现了引擎本身内存管理的引用计数