tipos template plantillas plantilla funciones example c++ templates

template - tipos de plantillas en c++



Cómo definir una función de miembro de plantilla de una clase de plantilla (2)

Posible duplicado:
¿Cómo puedo definir una función de plantilla dentro de una clase de plantilla fuera de la definición de clase?

Estoy luchando con la sintaxis para el caso en que tengo una función de miembro de plantilla dentro de una clase de plantilla:

template <typename T> class Foo { void Bar(const T * t); template <typename T2> void Bar(const T2 * t); }; template <typename T> void Foo<T>::Bar(const T * t) { // ... no problem ... } template <typename T> void Foo<T>::Bar<typename T2>(const T2 * t) { // ... this is where I''m tearing my hair out ... }

La primera función de miembro está bien, pero la función de miembro de plantilla que maneja tipos distintos al tipo base de la clase de plantilla es donde tengo problemas. Para el caso anterior, recibo los siguientes errores:

template_problem.cpp:12: error: parse error in template argument list template_problem.cpp:12: error: expected ‘,’ or ‘...’ before ‘*’ token template_problem.cpp:12: error: ISO C++ forbids declaration of ‘T2’ with no type template_problem.cpp:12: error: template-id ‘Bar<<expression error> >’ in declaration of primary template template_problem.cpp:12: error: prototype for ‘void Foo<T>::Bar(int)’ does not match any in class ‘Foo<T>’ template_problem.cpp:4: error: candidates are: template<class T> template<class T2> void Foo::Bar(const T2*) template_problem.cpp:7: error: void Foo<T>::Bar(const T*) template_problem.cpp:12: error: template definition of non-template ‘void Foo<T>::Bar(int)’

y también he intentado cualquier otra variación de sintaxis que se me ocurra para la versión de plantilla de Bar .


template <typename T> template <typename T2> void Foo<T>::Bar(const T2 * t) { // ... this is where I''m tearing my hair out ... }

Ugly no es eso.


template<typename T> template<typename T2> void Foo<T>::Bar(const T2* t) { // stop tearing your hair out }