2011-10-16 24 views
11

¿Es esta construcción de plantillas válida en plantillas C++?Parámetro de la plantilla de la plantilla en la función

template < template <typename T2> class T> 
void foo() { 

} 
+3

@ChrisLutz, creo que 'T2' es opcional. – iammilind

+0

@ChrisLutz: Creo que, realmente no. http://ideone.com/8jlI5 – Nawaz

+0

@Nawaz - Recuerdo haber leído eso en alguna parte. Me parece estar equivocado en todo el lugar hoy. Mi error. –

Respuesta

13

Sí. Es válido.

Puede llamar a esta función con cualquier plantilla de clase que tiene exactamente un parámetro de plantilla. Por ejemplo,

template<typename T> 
struct A 
{ 
    //... 
}; 

foo<A>(); //ok 

Tenga en cuenta que no tiene que proporcionar el argumento de plantilla para A plantilla de clase, lo que significa, la siguiente daría lugar a error de compilación:

foo< A<int> >(); //error 

Asimismo, en su código T2 es opcional, y de hecho, no se puede utilizar en la función, así que es mejor quitarlo para que la definición más simple:

template < template <typename> class T> 
void foo() { 

    T<int> x; //this is how T can be instantiated; provide template argument! 
} 

demostración: http://ideone.com/8jlI5

+0

Como 'T2' en este caso, ¿siempre es opcional? Tampoco podría usarlo en las plantillas de clase. http://ideone.com/LEt6N – user103214

+0

@ user974191: Sí. Nunca es requerido. ¡No puedes usarlo en la definición de la plantilla! – Nawaz

Cuestiones relacionadas