Tengo una clase MyClass que está templated en typename T. Pero adentro, quiero un método que está modelado en otro tipo TT (que no está relacionado con T).método con plantilla en T dentro de una clase con plantilla en TT: Es posible/correcto
Después de leer/retoques, me encontré con la siguiente notación:
template <typename T>
class MyClass
{
public :
template<typename TT>
void MyMethod(const TT & param) ;
} ;
Por razones estilísticas (me gusta tener mi declaración de la clase de plantilla en un archivo de cabecera, y las definiciones de método en otro archivo de cabecera), I no definirá el método dentro de la declaración de clase. Por lo tanto, tengo que escribir como:
template <typename T> // this is the type of the class
template <typename TT> // this is the type of the method
void MyClass<T>::MyMethod(const TT & param)
{
// etc.
}
Yo sabía que tenía que "declarar" las typenames utilizados en el procedimiento, pero no sabía exactamente cómo y encontrado a través de ensayos y errores.
El código anterior compila en Visual C++ 2008, pero: ¿Es esta la forma correcta de tener un método con plantilla en TT dentro de una clase con plantilla en T?
Como bonificación: ¿Hay problemas/sorpresas/limitaciones ocultos detrás de este tipo de código? (Creo que las especializaciones pueden ser bastante divertidas para escribir)
En cuanto a las especializaciones: no puede especializar una función de miembro sin especializar explícitamente la clase contenedora: http://stackoverflow.com/questions/2097811/c-syntax-for-explicit-specialization-of-a-template- function-in-a-template-class/2114807 –