C++模板常用使用方法介绍
C++编程语言中的模板应用在一定程度上大大提高了程序开发的效率。我们在这篇文章中为大家详细讲解一下有关C++模板的基本概念,希望初学者们可以通过本文介绍的内容充分掌握这方面的知识。
前段时间重新学习C++,主要看C++编程思想和C++设计新思维。对模版的使用有了更进一层的了解,特总结如下:
下面列出了C++模板的常用情况:
1. C++模板类静态成员
template < typename T> struct testClass { static int _data; }; template< > int testClass< char>::_data = 1; template< > int testClass< long>::_data = 2; int main( void ) { cout < < boolalpha < < (1==testClass< char>::_data) < < endl; cout < < boolalpha < < (2==testClass< long>::_data) < < endl; }
2. C++模板类偏特化
template < class I, class O> struct testClass { testClass() { cout < < "I, O" < < endl; } }; template < class T> struct testClass< T*, T*> { testClass() { cout < < "T*, T*" < < endl; } }; template < class T> struct testClass< const T*, T*> { testClass() { cout < < "const T*, T*" < < endl; } }; int main( void ) { testClass< int, char> obj1; testClass< int*, int*> obj2; testClass< const int*, int*> obj3; }
3.类模版+函数模版
template < class T> struct testClass { void swap( testClass< T>& ) { cout < < "swap()" < < endl; } }; template < class T> inline void swap( testClass< T>& x, testClass< T>& y ) { x.swap( y ); } int main( void ) { testClass< int> obj1; testClass< int> obj2; swap( obj1, obj2 ); }
4. 类成员函数模板
struct testClass { template < class T> void mfun( const T& t ) { cout < < t < < endl; } template < class T> operator T() { return T(); } }; int main( void ) { testClass obj; obj.mfun( 1 ); int i = obj; cout < < i < < endl; }
5. 缺省C++模板参数推导
template < class T> struct test { T a; }; template < class I, class O=test< I> > struct testClass { I b; O c; }; void main() { }
6. 非类型C++模板参数
template < class T, int n> struct testClass { T _t; testClass() : _t(n) { } }; int main( void ) { testClass< int,1> obj1; testClass< int,2> obj2; }
7. 空模板参数
template < class T> struct testClass; template < class T> bool operator==( const testClass< T>&, const testClass< T>& ) { return false; }; template < class T> struct testClass { friend bool operator== < > ( const testClass&, const testClass& ); }; void main() { }
8. template template 类
相关推荐
文山羊 2020-11-07
susmote 2020-11-07
拉斯厄尔高福 2020-11-04
xceman 2020-10-23
hellojunz 2020-10-23
caojhuangy 2020-10-12
xinyupan 2020-09-28
lousir 2020-09-27
一个逗逗 2020-09-22
Maryhuan 2020-09-20
rkhstar 2020-09-09
DreamSnow 2020-09-09
aehousmantao 2020-09-03
tkernel 2020-09-03
abfdada 2020-08-26
svap 2020-08-25
二十不悔三十而立 2020-08-19
FlightForever 2020-08-17
joyjoy0 2020-08-13