5

Supongamos que tengo una plantilla de función que se utiliza el parámetro de tipo como un tipo de retorno solamente:duda sintaxis para especializada plantillas de función

template <typename T> 
T foo() 
{ 
    return whatever; 
} 

Entonces ¿cuál es la sintaxis correcta para especializarse esa plantilla de función? Los dos siguientes parecen funcionar:

template <> 
std::string foo() 
{ 
    return whatever; 
} 

template <> 
std::string foo<std::string>() 
{ 
    return whatever; 
} 

¿Hay alguna diferencia entre los dos? Si no, ¿cuál es la forma idiomática?

Respuesta

1

El compilador deducir la especialización de plantilla correcta en función de las informaciones proporcionadas (en este caso, la función de tipo de retorno).

Así que estas sintaxis tienen exactamente el mismo comportamiento, y uno es más explícita que la otra.

1

En la mayoría de casos, no hay ninguna diferencia entre los dos.

Si sobrecarga varias funciones de plantilla, puede ser necesario el segundo formulario para eliminar una ambigüedad sobre qué sobrecarga quiere especializar (es probable que tenga otros problemas si se encuentra en esta situación, por ejemplo, también deberá estar explícito en los lugares de llamada).

+0

Con este ejemplo, ya es imposible deducir el argumento de la plantilla en los sitios de llamadas. –

Cuestiones relacionadas