2010-06-16 20 views
7

este código:¿Clase de plantilla que se refiere a sí misma como un parámetro de plantilla de plantilla?

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

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

no compila, supongo que ya A<B> se interpreta como A<B<T> > dentro del ámbito B 's.

así, ¿cómo se pasa B como un parámetro de plantilla plantilla dentro de su alcance?

+0

¿No se limita a especificar el siguiente trabajo? debido T puede ser cualquier tipo simple o una plantilla tipo también ........... Código _-------- plantilla clase A { }; – Pardeep

+0

@Pardeep: No te seguí del todo. 'T de A' es un argumento de plantilla de plantilla. Es muy diferente de 'plantilla clase A {}'. – uj2

+0

¿Por qué es posible que desee? Nunca he visto ningún uso para eso. – Puppy

Respuesta

12

Prueba esto:

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

Según C++ estándar 14.6.1/2 se debe utilizar el nombre normal de la plantilla (es decir, el nombre del ámbito circundante, no el nombre-clase-inyectada) .

+0

Gracias. Eso lo hizo. – uj2

+5

Agradable :) Vale la pena señalar que el espacio antes de ':: B' es necesario, sin embargo :) –

Cuestiones relacionadas