C++模板常用使用方法介绍

开发 后端
我们在这篇文章中为大家总结了一些C++模板的常用方法,比如C++模板类静态成员;C++模板类偏特化;类模版+函数模版等。

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;   

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 );   

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;   

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. {  

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;   

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. {  

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';  

以上就是对C++模板的一些常用方法的介绍。

【编辑推荐】

  1. C++存储区域基础概念详解
  2. C++ typedef使用方法总结
  3. C++调用C链接库具体应用技巧讲解
  4. C++类成员相关应用方法介绍
  5. C++循环语句基本概念详解
责任编辑:曹凯 来源: 博客园
相关推荐

2010-01-25 14:10:21

C++堆栈

2011-07-13 11:34:58

CC++时间函数

2010-01-26 17:35:09

C++栈

2010-02-02 09:32:32

C++ typedef

2011-07-20 13:34:37

C++

2009-12-30 17:47:54

Ubuntu常用命令

2009-08-28 17:01:43

C#构造函数

2010-03-02 16:58:11

AJAX WCF服务项

2011-05-17 16:20:46

C++

2010-03-10 19:18:10

Python scri

2011-03-30 10:41:11

C++数据库

2023-09-12 07:38:36

C++getline函数

2009-12-29 10:40:36

ADO组件

2009-12-25 17:10:51

WPF动态资源

2010-02-03 16:35:45

C++回文

2024-01-23 10:48:44

C++函数重载开发

2013-03-25 11:00:35

互联网开发

2010-02-04 10:52:36

C++字符串分割函数

2010-01-27 14:18:41

Android智能指针

2011-07-20 14:45:43

C++结构体
点赞
收藏

51CTO技术栈公众号