c++ template(4)基本技巧
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                c++ template(4)基本技巧
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                1.關鍵字typename
這里內部的的typename指示T::const_iterator是一個類型,而不是一個靜態成員.?
 
2.使用this->
模板類繼承后無法直接調用基類成員,需要使用this->修飾符來訪問基類成員
template <typename T> class Base { public:void exit(); }; template <typename T> class Derive:public Base<T> { public:void foo(){this->exit();//orBase<T>::exit();} };3.模板賦值操作
默認情況下,相同類型的參數可以互相賦值,不同參數無法直接賦值.如下
Stack<int> intStack1,intStack2; // stack of intsStack<float> floatStack; // stack of floatsintStack1=intStack2;//okfloatStack=intStack1;//error重寫=操作符
// assign stack of elements of type T2 template <typename T2> Stack<T>& operator= (Stack<T2> const&);實現
template <typename T>template <typename T2> Stack<T>& Stack<T>::operator= (Stack<T2> const& op2) {if ((void*)this == (void*)&op2) { // assignment to itself?return *this;}Stack<T2> tmp(op2); // create a copy of the assigned stackelems.clear(); // remove existing elementswhile (!tmp.empty()) { // copy all elementselems.push_front(tmp.top());tmp.pop();}return *this; }當然以上應用也可以使用局部特化
template <typename T, typename CONT = std::deque<T> > class Stack {private:CONT elems; // elementspublic:void push(T const&); // push elementvoid pop(); // pop elementT top() const; // return top elementbool empty() const { // return whether the stack is emptyreturn elems.empty();}// assign stack of elements of type T2template <typename T2, typename CONT2>Stack<T,CONT>& operator= (Stack<T2,CONT2> const&); };4.雙重模板參數
模板參數也可以是一個模板類型
template <typename T,template <typename ELEM> class CONT = std::deque > class Stack {private:CONT<T> elems; // elementspublic:void push(T const&); // push elementvoid pop(); // pop elementT top() const; // return top elementbool empty() const { // return whether the stack is emptyreturn elems.empty();} };5.模板參數初始化
template <typename T,template <typename ELEM> class CONT = std::deque > class Stack {private:CONT<T> elems; // elementspublic:void push(T const&); // push elementvoid pop(); // pop elementT top() const; // return top elementbool empty() const { // return whether the stack is emptyreturn elems.empty();} };看起來似乎有點暈
6.模板參數值初始化
(1)函數
template <typename T> void foo() {//only declareT x;//initializeT x=T(); }(2)類模板函數
template <typename T> class MyClass { private:T x; public:MyClass():x() {} };總結
以上是生活随笔為你收集整理的c++ template(4)基本技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: c++ template(5)模板实战
- 下一篇: c++ template笔记(3)非类型
