如何声明模板类的模板?见下面的代码:
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?>;
答案 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> >
。