这取决于你传递给它的是什么,如果你试图实例化的模板将一个类模板作为一个参数接受2(或c 11一个可变数量的)类,那么你可以将std :: vector传递给它.但是,在大多数情况下,模板需要类作为参数,并且您无法传递类模板std :: vector.
template
struct gimme_a_type{};
template class T>
struct gimme_a_template{};
gimme_a_type<:vector> //
gimme_a_type<:vector> > //
gimme_a_template<:vector> //
gimme_a_template<:vector> > //
为了响应您的编辑,使用类模板作为模板参数存在困难.在您尝试传递的类模板中有默认参数时,实际上很难匹配参数的数量(在我们的例子中是std :: vector).
请注意,上面的示例需要一个类模板,它需要2个类,而不只是一个.这是因为std :: vector接受两个参数,第二个参数默认为std :: allocator< T>为了我们.
以下示例演示了此问题:
template class Tem>
struct A
{
Tem v; //
Tem >; //
};
template class Tem>
struct A2
{
Tem v; //
};
C 11示例更好,但如果有人通过了一个具有签名模板< class的类,则bool = false> A3类它再次失败,因为A2需要一个可变数量的类,而不是可变数量的whatevers.所以即使A3< int>可能是一个有效的实例化,你无法将该类传递给A2.解决方案是始终在模板参数列表中使用类型,并使用std :: integral_constant包装器模板来传递整数常量.