zoukankan      html  css  js  c++  java
  • 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 < <  '
    ';  
    13 } 

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

  • 相关阅读:
    9 jmeter之检查点
    8 jmeter之集合点
    7 jmeter之参数化
    6 jmeter元件的作用域与执行顺序
    5 jmeter性能测试小小的实战
    4 jmeter badboy脚本开发技术详解
    3 jmeter的两种录制方法
    2 jmeter常用功能介绍-测试计划、线程组
    Errors occurred during the build. Errors running builder 'DeploymentBuilder' on project
    常见异常总结
  • 原文地址:https://www.cnblogs.com/liangliangdetianxia/p/4495504.html
Copyright © 2011-2022 走看看