как объявить шаблон класса шаблона - PullRequest
1 голос
/ 06 мая 2011

Как можно объявить шаблон класса шаблона ??см. ниже код:

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 ]

3 голосов
/ 06 мая 2011

Если вы хотите использовать 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> >();
2 голосов
/ 06 мая 2011

Вы можете просто написать это так:

C< B< A > > c;

Если вас это смущает, вы можете использовать typedef:

typedef B<A> MyB;
C<MyB> c;
2 голосов
/ 06 мая 2011

Шаблон C ожидает не шаблонный тип, чтобы он мог генерировать класс. Вот почему C<A> работает: A не шаблон. Однако C<B> не работает, поскольку B - это всего лишь шаблон для самого типа. У вас должен быть какой-то тип для создания экземпляра шаблона B.

Например, это может сработать:

C<B<A> > x;
1 голос
/ 06 мая 2011

Ну, B также шаблон, поэтому будет работать что-то вроде C<B<A>>.

Обратите внимание, что некоторые компиляторы видят >> как оператор сдвига и требуют C<B<A> >.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...