studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código con avanzado aplicaciones c++ templates

c++ - reales - libro de android studio en español pdf



Llamando a la función de plantilla dentro de la clase de plantilla (3)

¿Podría ser este un caso de foo.template bar‹ double > ?

Descargo de responsabilidad: la siguiente pregunta probablemente sea tan fácil que me sorprenda ver la primera respuesta. Además, quiero disculparme por cualquier pregunta duplicada: los problemas sintácticos no siempre son fáciles de identificar, sino una explicación verbal, por lo que buscarlos no es tan fácil ...

Pero basta de eso. Tengo dos clases con plantilla, una de ellas tiene una función miembro con plantilla, la otra clase intenta llamar a esa función. A continuación se muestra un ejemplo mínimo de producción de errores:

#include <iostream> template <typename T> class Foo { public: Foo() { } template <typename outtype> inline outtype bar(int i, int j, int k = 1) { return k; } }; template <typename T> class Wrapper { public: Wrapper() { } double returnValue() { Foo<T> obj; return obj.bar<double>(1,2); // This line is faulty. } }; int main() { Wrapper<char> wr; double test = wr.returnValue(); std::cout << test << std::endl; return 0; }

En tiempo de compilación, esto resulta en

expected primary-expression before ''double'' expected '';'' before ''double'' expected unqualified-id before ''>'' token

donde todos los mensajes de error se dirigen al enlace marcado en el código.

Ya te agradezco por tus ideas, no importa lo obvias que sean.


Como a menudo: una vez que se publicó la pregunta, la respuesta vino por sí sola. Corrigiendo la línea defectuosa para

return obj.template bar<double>(1,2);

Da los resultados esperados.

Gracias por leer...