成员模板

一、简介

任意类(模板或非模板)可以拥有本身为类模板或函数模板的成员,这种成员称为成员函数模板。STL中为什么要运用这种技术呢?考虑 vector 容器的 assign 成员函数,它可以接受两个迭代器为容器赋值,而这两个迭代器可以是 list 的迭代器、deque的迭代器、甚至是两个原生指针。也就是说成员函数 assign 的形参是不确定的。解决的方法是使用模板形参来表示迭代器形参的类型。

二、语法

C++ 中成员模板的写法如下:

//在类内部
template <class I>
返回类型 函数名(模板参数表)
{  }

在外面定义成员模板,必须包含两个模板形参表,类模板形参和自己的模板形参。首先是类模板形参表,然后是自己的模板形参表。

template <类模板形参表> template <模板形参表>
返回类型 类名<类参数表>::函数名(函数参数表)
{ }

例:

#include <iostream>
#include <list>
using namespace std;
 
//自定义
class MyAlloc{
};
 
template <class T, class Alloc = MyAlloc>
class MyVector
{
public:
	typedef T value_type;
	typedef value_type* iterator;
	template <class I>
	MyVector(I first, I last);
	template <class I>
	void assign(I first, I last);
};
template<class T, class Alloc> template <class I>
MyVector<T, Alloc>::MyVector(I first, I last)
{ 
	cout<<"MyVector"<<endl; 
}
template<class T, class Alloc> template <class I>
void MyVector<T, Alloc>::assign(I first, I last)
{ 
	cout<<"assign"<<endl; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值