Bootstrap

[C++] template template parameter 模板模板参数

1.

模板模板参数指的是模板的参数又是一个模板。

示例:

#include <iostream>
#include <list>
using namespace std;

template<typename Foo>
Foo calc(const Foo& a, const Foo& b)
{
	return a + b;
}

template<typename T, template<typename U>typename Container>
class XCls
{
private:
	Container<T> c;
};

template<typename T>
class test
{
private:
	T t;
};
int main()
{
	XCls<string, test> mylst1;
	while (1);
	return 0;
}

对于XCls类而言,其模板的第一给参数是T类型,第二个参数是Container,它是一个可以指定一个U类型的变量。

2.

注意:

XCls<string,list> mylst1; 编译器就会报错,分析如下:将string和list 传入到类XCls中,然后就会定义一个list<string>的c 变量,这样看起来是可以的,但实际上list容器实际上是有第二参数的,虽然第二参数有默认的参数,正如我们平常使用的那样,只需要指定一个参数,但在这里无法通过编译,因此,我们可以使用如下的解决方法:

template<typename T, typename Sequence=list<T>>
class stack
{
private:
Sequence c;
};

3.

我们定义了一个stack的模板类,模板参数第一个是T类型,第二个是一个Sequence类型,有一个默认的类型是list<T>

使用方法有两种:

stack<int> s1;

stack<int,deque<int>> s2;

但这不是模板模板参数,因为一旦指定了第一个模板参数,那么第二个参数的类型就会确定,而真正的模板模板参数,第二个模板参数和第一个模板参数的类型是没有关系的,可以指定为第一个模板参数类型,也可以指定为其它类型。因此,这不是模板模板参数。

 

参考博客:https://blog.csdn.net/men_wen/article/details/74033327

;