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

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

  • 相关阅读:
    winform 监视DataGridView的滚动条,加载数据
    SQL 自动生成行号
    SQL 删除重复的数据(多个字段判断),只保留一条数据
    C# 一个简单的 工厂模式 例子
    winform 重写TextBox的OnTextChanged方法(事件)
    winform 给文本框加载内容的时候 始终让文本框的滚动条到底(允许显示多行Multiline=True)
    winform 制定DataGridViewTextColumn列(更改DataGridView的Cell的状态很有用)
    winform 使用委托 实现多线程访问控件
    C# 一个简单的递归函数和 两个List<T> 合并
    ADO.NET  把数据库A的某表的数据内容复制到数据库B的某表内
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2783870.html
Copyright © 2020-2023  润新知