C++模板常用使用方法介绍
转载:http://developer.51cto.com/art/201002/182202.htm
C++编程语言中的模板应用在一定程度上大大提高了程序开发的效率。我们在这篇文章中为大家详细讲解一下有关C++模板的基本概念,希望初学者们可以通过本文介绍的内容充分掌握这方面的知识。
前段时间重新学习C++,主要看C++编程思想和C++设计新思维。对模版的使用有了更进一层的了解,特总结如下:
下面列出了C++模板的常用情况:
1. C++模板类静态成员
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.类模版+函数模版
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. 类成员函数模板
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++模板参数推导
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++模板的一些常用方法的介绍。