模板与泛型 —— 模板模板参数
2020-06-14 本文已影响0人
从不中二的忧伤
一、模板模板参数
一、模板模板参数
考虑在类模板中,有成员变量 : vector<T> myt;
template<typename T>
class Test
{
public:
void setMyt(T t)
{
myt.push_back(t);
}
T getMyt(size_t i)
{
return myt[i];
}
public:
vector<T> myt;
};
int main()
{
Test<int> t;
t.setMyt(1);
cout << t.getMyt(0) << endl;
return 0;
}
vector 实际上是一个类模板,现在考虑,把类似vector, list 的类模板,当作模板参数,传入一个类模板中:
- 此处的 Container 即是模板模板参数
- vector 和 list,作为模板模板参数时,因为编译器无法确定默认的 allocator<T> 缺省参数,需要使用 using 设定包含vector 和 list 缺省参数的类型,将此类型作为模板模板参数。
template<typename T>
using MyVec = vector<T, allocator<T> >;
template<typename T>
using MyList = list<T, allocator<T> >;
template <typename T, template<typename> class Container>
class Test
{
public:
void setMyt(T t)
{
myt.push_back(t);
}
T getMyt(size_t i)
{
return myt.back();
}
public:
Container<T> myt;
};
int main()
{
Test<int, MyVec> t;
t.setMyt(1);
cout << t.getMyt(0) << endl;
Test<char, MyList> tlist;
tlist.setMyt('a');
cout << tlist.getMyt(0) << endl;
return 0;
}