C++隙笔--成员模板(member template)

前言

模板主要分为三大类:

  • 类模板 (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
};

最后

本文简单的表述了成员模板及其实现,在自己学这块时由于网上资料较少,整理了一下,可能有错误也请指出感谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值