c++11新特性:template-template-parameter

用法

模板参数就是模板的参数,它是一种模板技巧,形式如下:

1
2
3
4
5
6
7
8
9
10
11
template<typename T, template<typename U> typename Container>
class Foo{
private:
Container<T> c;
public:
Foo(){
for(long i = 0; i < SIZE; ++i){
c.insert(c.end(), T());
}
}
}

当我们需要向模板参数传递参数的时候,例如我需要一个形如Foo<string,list>这样的类,在使用的时候可以这么定义:

1
2
3
4
5
6
//模板别名不能写在函数体内
template<typename T>
using Lst = list<T, allocator<T>>;
//调用
Foo<string, list> mylist1; //写法错误
Foo<string, Lst> mylist2;

下面这个不是模板参数,因为list已经绑定了int类型的模板参数.

1
2
3
4
5
6
7
8
9
10
11
template <class T, class Sequence = deque<T>>
class stack {

friend bool operateo== <> (cosnt stack&, const stack&);
friend bool operateo< <> (cosnt stack&, const stack&);
protected:
Sequence c;
......
};
stack<int> s1;
stack<int, list<int>> s2;