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 originaltemplate< class T1, class T2 >
class POO
{
public:
void func( T1 a, T2 b )
{
}
};
Y tu intención es especializar func, tu única posibilidad es sobrecargar la función:
Código C++:
Ver originaltemplate< class T1, class T2 >
class POO
{
public:
void func( T1 a, T2 b )
{
}
void func( T1 a, int b )
{
}
};
El problema que plantea este diseño es que si alguien intenta usar una instancia del template tal que:
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 originalclass POO
{
public:
template< class T1, class T2 >
void func( T1 a, T2 b )
{
}
};
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 originalclass POO
{
public:
template< class T1, class T2 >
void func( T1 a, T2 b )
{
}
template< class T1, int >
void func( T1 a, int b )
{
}
};
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.