如何声明模板类的模板

时间:2011-05-06 12:43:18

标签: c++ templates

如何声明模板类的模板?见下面的代码:

File: A.h
class A
{
    ...
    ...
};

File: B.h
template <typename U>
class B
{
    ...
    ...
};

File C.h
template <class T>
class C
{
    ...
    ...
};

File C.cpp
//In this file I am able to write template declaration for class A(non-template class)
#include "A.h"
template C<A>; //this works fine. 

How can I write the same for class B(which is a template class.)
#include "B.h"
template C<What should I write here for class B?>;

4 个答案:

答案 0 :(得分:3)

如果您想使用B作为C类模板的类型参数,那么您可以写下:

template class C<B<int> >; //i.e provide the some type B template class
       //^^^^ this is needed for explicit instantiation!

C<B<A> >  variable;
C<B<short> >  *pointer = new C<B<short> >();

答案 1 :(得分:2)

C模板需要非模板类型,以便它可以生成一个类。这就是C<A>有效的原因:A不是模板。但是,C<B>不起作用,因为B只是类型本身的模板。您需要使用某种类型来实例化B模板。

例如,这可能有效:

C<B<A> > x;

答案 2 :(得分:2)

你可以这样写:

C< B< A > > c;

如果您发现令人困惑,那么您可以使用typedef:

typedef B<A> MyB;
C<MyB> c;

答案 3 :(得分:1)

嗯,B也是一个模板,所以像C<B<A>>这样的东西会起作用。

请注意,某些编译器会将>>视为移位运算符,并且需要C<B<A> >