Ver Mensaje Individual
  #7 (permalink)  
Antiguo 15/04/2015, 00:14
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Diferenciar entrada de datos por consola

Cita:
Iniciado por dmorill Ver Mensaje
Eferion, podrías explicarme cómo funciona el template vacío? Es que no le veo mucho sentido pero funciona muy bien en el programa.

Código C++:
Ver original
  1. template< > bool Convert(const string& cadena, int& valor)

Gracias.
Ese template es una especialización. El compilador, al "ver" esta función, se pondrá a buscar y localizará el template "base", como ambos tienen la misma firma (mismo return y mismo nombre y mismo número de argumentos aunque de diferente tipo, que para eso es un template), entonces entiende que se trata de una especialización del template... en este caso no hace falta indicar el typename porque el compilador es capaz de deducirlo de forma implícita. Dicho de otra forma:

El compilador sabe que, en el template base, el tipo del segundo argumento de la función depende del template... si se encuentra una especialización en la que ese argumento en vez de ser "T" es un tipo concreto, entonces tiene la certeza de que ese tipo concreto es el que sustituye a "T".

El template base lo configuré para que retonrase "false", ya que el template genérico no sabe cómo realizar una conversión abstracta... pero sienta una base a partir de la cual tu puedes, mediante especializaciones del template, añadir todas las opciones que creas oportunas. Al final lo que te queda es un sistema completo de conversión en una sola función.