2010-06-16 7 views
7

ten kod:Klasa szablonu, która określa się jako parametr szablonu szablonu?

template <template <typename> class T> 
class A 
{ 
}; 

template <typename T> 
class B 
{ 
    A<B> x; 
}; 

nie kompiluje, przypuszczam ponieważ A<B> jest interpretowany jako A<B<T> > w zakresie B „s.

Jak zatem przekazać B jako parametr szablonu szablonu w jego zasięgu?

+0

Nie określa po prostu następujących prac? ponieważ T może być dowolny typ prosty lub szablon typ również ........... Kod _-------- szablon klasa A { }; – Pardeep

+0

@Pardeep: Nie podążyłem za tobą. 'A''s T jest argumentem szablonu szablonu. Jest bardzo różny od 'szablonu klasy A {}'. – uj2

+0

Dlaczego miałbyś chcieć? Nigdy nie widziałem żadnego pożytku z tego. – Puppy

Odpowiedz

12

Spróbuj tego:

template <typename T> 
class B 
{ 
    A<::B> x; // fully qualified name for B 
}; 

Według C++ standard 14.6.1/2 należy użyć normalnego nazwę szablonu (czyli nazwę z zakresu zamykającego, nie wstrzykuje klasy-name) .

+0

Dzięki. Tak było. – uj2

+5

Nice one :) Warto zauważyć, że spacja przed ':: B' jest potrzebna, choć :) –