¿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() {
}
¿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() {
}
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
Como 'T2' en este caso, ¿siempre es opcional? Tampoco podría usarlo en las plantillas de clase. http://ideone.com/LEt6N – user103214
@ user974191: Sí. Nunca es requerido. ¡No puedes usarlo en la definición de la plantilla! – Nawaz
@ChrisLutz, creo que 'T2' es opcional. – iammilind
@ChrisLutz: Creo que, realmente no. http://ideone.com/8jlI5 – Nawaz
@Nawaz - Recuerdo haber leído eso en alguna parte. Me parece estar equivocado en todo el lugar hoy. Mi error. –