前言
模板主要分为三大类:
- 类模板 (class template)
- 函数模板(function template)
- 成员模板(member template)
今天让我们了解一下成员模板(member template)。
何为成员模板(member template)
在此之前我们先了解一下什么是模板(template),模板可以说是C++的泛型
泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。
泛型是为编写面向对象程序增加了极大的效力和灵活性。
下面是一种函数模板的实现:
template <typename T>
inline T const& Min(T const& a, T const& b)
{
return a < b ? a:b;
}
int minnum = min(1,2);
由于函数的参数为int,所以min函数中所有的T都被替换成了int,让函数更具灵活性。
简单了解一下模板后让我们将目光重新放回到成员模板上来。
模板可用作结构、类或模板类的成员。这一种形式便被称为是成员模板。
template<class T1,class T2>
struct pair{
T1 first;
T2 second;
pair():
first(T1()),second(T2()){}
pair(const T1& a,const T2& b):
first(a),second(b){}
template<class U1,class U2>
explicit pair(const pair<U1,U2>& p):
first(p.first),second(p.second){}
};
以上可以看到一个类模板中有个模板,这就是成员模板。
pair<Son1,Son2> s; //这里的Son互相对应继承Base
pair<Base1,Base2> b(s);
这样就可以将Son构成的一个类的数据,存放到Base里。这就是成员模板的一种使用方法。
大量标准库的构造函数中也经常会发现成员模板。
需要注意的是成员函数模板不可以是虚函数!
template <class T> struct A {
template <class U> virtual void b(U); // error
};
最后
本文简单的表述了成员模板及其实现,在自己学这块时由于网上资料较少,整理了一下,可能有错误也请指出感谢!