c++模板类

来源:互联网 发布:银海医保软件 编辑:程序博客网 时间:2024/05/29 03:31

前段时间重新学习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,
    testClass
    < T>& y )
  6. {
  7. x.swap( y );
  8. }
  9. int main( void )
  10. {
  11. testClass< int> obj1;
  12. testClass< int> obj2;
  13. swap( obj1, obj2 );
  14. }

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>&,
    const testClass
    < T>& )
  3. {
  4. return false;
  5. };
  6. template < class T> struct testClass
  7. {
  8. friend bool operator== < >
    ( const testClass&, const testClass& );
  9. };
  10. void main()
  11. {
  12. }

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++模板的一些常用方法的介绍。

原创粉丝点击