Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/12/2014, 02:10
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Templates para clase derivada.

Deberías poner la declaración de la función que pretendes especializar. Dependiendo de cómo esté declarada, variará la forma de crear la especialización.

También sería interesante saber en cual de las dos clases está declarada dicha función y si la especialización la quieres realizar en la misma clase "conjunto" o en una derivada.

Un saludo.

----

Edito:

Bueno, en cualquier caso te pongo un poco casos generales.

Si tu tienes:

Código C++:
Ver original
  1. template< class T1, class T2 >
  2. class POO
  3. {
  4.   public:
  5.     void func( T1 a, T2 b )
  6.     {
  7.     }
  8. };

Y tu intención es especializar func, tu única posibilidad es sobrecargar la función:

Código C++:
Ver original
  1. template< class T1, class T2 >
  2. class POO
  3. {
  4.   public:
  5.     void func( T1 a, T2 b )
  6.     {
  7.     }
  8.  
  9.     void func( T1 a, int b )
  10.     {
  11.     }
  12. };

El problema que plantea este diseño es que si alguien intenta usar una instancia del template tal que:

Código C++:
Ver original
  1. POO<T, int > clase;

Se encontrará con el problema de que el código no compilará porque tendrás dos funciones con el mismo nombre y la misma firma "func(T, int)".

Si, por contra, en vez de ser la clase la que aporta los parámetros, es la propia función la cosa cambia:

Código C++:
Ver original
  1. class POO
  2. {
  3.   public:
  4.     template< class T1, class T2 >
  5.     void func( T1 a, T2 b )
  6.     {
  7.     }
  8. };
Ahora, el parámetro a especializar no depende de la clase, sino de la propia función. En este caso, especializar la función es algo que se consigue con un código tal que:

Código C++:
Ver original
  1. class POO
  2. {
  3.   public:
  4.     template< class T1, class T2 >
  5.     void func( T1 a, T2 b )
  6.     {
  7.     }
  8.  
  9.     template< class T1, int >
  10.     void func( T1 a, int b )
  11.     {
  12.     }
  13. };

Ahora, el código compilará sin problemas, porque el compilador sabe que para el caso de "func<T,int>( )" no debe "crear" dos funciones, sino que únicamente debe hacer uso de la especialización.

Si tu caso no se ajusta a estos que te he puesto, tendrás que aportar información adicional para poder darte una respuesta más concreta.

Un saludo.

Última edición por eferion; 15/12/2014 a las 02:34