轉載:http://developer.51cto.com/art/201002/182202.htm編程
C++編程語言中的模板應用在必定程度上大大提升了程序開發的效率。咱們在這篇文章中爲你們詳細講解一下有關C++模板的基本概念,但願初學者們能夠經過本文介紹的內容充分掌握這方面的知識。編程語言
前段時間從新學習C++,主要看C++編程思想和C++設計新思惟。對模版的使用有了更進一層的瞭解,特總結以下:函數
下面列出了C++模板的經常使用狀況:學習
1. C++模板類靜態成員spa
1 template < typename T> struct testClass 2 { 3 static int _data; 4 }; 5 template< > int testClass< char>::_data = 1; 6 template< > int testClass< long>::_data = 2; 7 int main( void ) { 8 cout < < boolalpha < < (1==testClass< char>::_data) < < endl; 9 cout < < boolalpha < < (2==testClass< long>::_data) < < endl; 10 }
2. C++模板類偏特化設計
1 template < class I, class O> struct testClass 2 { 3 testClass() { cout < < "I, O" < < endl; } 4 }; 5 template < class T> struct testClass< T*, T*> 6 { 7 testClass() { cout < < "T*, T*" < < endl; } 8 }; 9 template < class T> struct testClass< const T*, T*> 10 { 11 testClass() { cout < < "const T*, T*" < < endl; } 12 }; 13 int main( void ) 14 { 15 testClass< int, char> obj1; 16 testClass< int*, int*> obj2; 17 testClass< const int*, int*> obj3; 18 }
3.類模版+函數模版code
1 template < class T> struct testClass 2 { 3 void swap( testClass< T>& ) { cout < < "swap()" < < endl; } 4 }; 5 template < class T> inline void swap( testClass< T>& x, 6 testClass< T>& y ) 7 { 8 x.swap( y ); 9 } 10 int main( void ) 11 { 12 testClass< int> obj1; 13 testClass< int> obj2; 14 swap( obj1, obj2 ); 15 }
4. 類成員函數模板htm
1 struct testClass 2 { 3 template < class T> void mfun( const T& t ) 4 { 5 cout < < t < < endl; 6 } 7 template < class T> operator T() 8 { 9 return T(); 10 } 11 }; 12 int main( void ) 13 { 14 testClass obj; 15 obj.mfun( 1 ); 16 int i = obj; 17 cout < < i < < endl; 18 }
5. 缺省C++模板參數推導blog
1 template < class T> struct test 2 { 3 T a; 4 }; 5 template < class I, class O=test< I> > struct testClass 6 { 7 I b; 8 O c; 9 }; 10 void main() 11 { 12 }
6. 非類型C++模板參數開發
1 template < class T, int n> struct testClass { 2 T _t; 3 testClass() : _t(n) { 4 } 5 }; 6 int main( void ) { 7 testClass< int,1> obj1; 8 testClass< int,2> obj2; 9 }
7. 空模板參數
1 template < class T> struct testClass; 2 template < class T> bool operator==( const testClass< T>&, 3 const testClass< T>& ) 4 { 5 return false; 6 }; 7 template < class T> struct testClass 8 { 9 friend bool operator== < > 10 ( const testClass&, const testClass& ); 11 }; 12 void main() 13 { 14 }
8. template template 類
1 struct Widget1 2 { 3 template< typename T> 4 T foo(){} 5 }; 6 template< template< class T>class X> 7 struct Widget2 8 { 9 }; 10 void main() 11 { 12 cout< < 3 < < '\n'; 13 }
以上就是對C++模板的一些經常使用方法的介紹。