Pregunta

Sé que Función plantillas se utilizan para hacer las funciones portátiles y para que pudieran ser utilizados con cualquier tipo de datos.

también especialización explícita de plantillas se realiza si tenemos una aplicación más eficaz para un tipo de datos específico.

Pero, en lugar de especialización explícita también podríamos simplemente un código Función Nontemplate , que podría ser llamado desde main. Esto nos ahorraría un tiempo de procesamiento como el compilador localizar Funciones Nontemplate más rápido que explícitamente funciones especializadas con plantilla que a su vez ser mejor en términos de eficiencia.

Entonces, ¿por qué usamos especialización explícita cuando tenemos la alternativa de simplemente llamando a Funciones Nontemplate

Por favor, corríjanme si me equivoco!

Editar 1: Me dijo mi profesor que siempre que hacemos plantillas de función y llamar a la función desde main, las primeras miradas del compilador para una función con plantilla y si no es capaz de localizar eso, entonces busca una plantilla de función de la que a su vez hace una la función de plantilla y luego lo requiere.

¿Fue útil?

Solución

Parece que estás confundiendo la eficiencia en tiempo de compilación con la eficiencia en tiempo de ejecución. La elección de la función de llamada se realiza en tiempo de compilación, no corre el tiempo, por lo que no hará ninguna diferencia en el tiempo de ejecución del programa.

especialización explícita se utiliza cuando se tiene un caso especial que puede beneficiarse de un tratamiento especial. A veces esto resulta contraproducente, como en el caso de std::vector<bool>, mientras que otras veces es bastante práctico. Esto significa que el usuario de la función no tiene que ser consciente de que hay un caso especial; es sólo transparente.

Otros consejos

  

Esto nos ahorraría un tiempo de procesamiento como el compilador ubicaría Funciones globales más rápido que de forma explícita funciones especializadas con plantilla que a su vez ser mejor en términos de eficiencia.

¿Por qué el compilador de encontrar una función nontemplate más rápido que una especialización de plantilla de función? ¿Usted como punto de referencia el rendimiento del compilador para verificar esta afirmación? Si utiliza una función llamada f, el compilador siempre tiene que compilar un conjunto de funciones candidatas y llevar a cabo la sobrecarga de resolución para determinar la función correcta a utilizar.

En tiempo de ejecución (que es cuando el rendimiento que realmente importa, ¿verdad?) El desempeño de llamar a una función de instancias de plantilla no es mejor debe ser que el rendimiento de llamar a una función nontemplate.

  

Entonces, ¿por qué utilizamos especialización explícita cuando tenemos la alternativa de simplemente llamar a las funciones globales?

En el caso general, para las plantillas de función, no se utiliza especialización explícita, ya que por lo general es confuso y difícil. La norma ISO C ++ tiene una advertencia poética que ser extremadamente cuidadoso cuando especializada plantillas de función. Usted puede leer "plantillas de funciones ¿Por qué no se especializan?" De Herb Sutter para una buena explicación de la cuestiones y por qué no desea especializarse plantillas de función.

Por razones de uniformidad. La persona que utiliza la API sólo llama a los métodos con argumentos particulares, algunos obtener la función genérica algunos se ponen funciones especializadas explícitamente - la necesidad del cliente saber ni el cuidado que se utilizan.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top