2010-08-13 20 views
7

Una especificación de plantilla de la plantilla es la siguiente:plantilla de la plantilla total especialización

template < template <class> class T > 
struct MyTemplate 
{ 
}; 

¿Cómo se supone que voy a crear un total (o parcial) de especialización para esta plantilla? ¿Esto es posible?

+1

... En algún lugar emocionante! No puedo esperar! –

+0

¿Quién en el mundo votó para cerrar, y por qué? Esta parece ser una pregunta tópica perfectamente legítima. –

+0

@Jerry: Si vieras los primeros 30 segundos de la pregunta (donde se emitió la votación), tendría sentido. Era solo el código hasta '{' sin ninguna pregunta. Hice el comentario: "'}; // ¿A dónde vas con esto? '" A lo que respondió @John. Pero está arreglado ahora. :) – GManNickG

Respuesta

5

De esta manera:

#include <iostream> 

template <typename T> 
struct foo{}; 

template <typename T> 
struct bar{}; 

template < template <class> class T > 
struct MyTemplate 
{ 
    static const bool value = false; 
}; 

template <> 
struct MyTemplate<bar> 
{ 
    static const bool value = true; 
}; 


int main(void) 
{ 
    std::cout << std::boolalpha; 
    std::cout << MyTemplate<foo>::value << std::endl; 
    std::cout << MyTemplate<bar>::value << std::endl; 
} 
+0

GMan, hay una forma de hacer cumplir en la especialización de MyTemplate qué tipo de barra T debería esperarse? – scooterman

+0

@scooterman: Bueno en tu clase solo usarías 'bar ' y funcionará o no. Si estoy entendiendo tu pregunta correctamente. – GManNickG

3

Una especialización de esto sería, por ejemplo, ser:

template<> 
struct MyTemplate<std::auto_ptr> { 
    // ... 
}; 
Cuestiones relacionadas