Funciones de plantilla y plantillas de función en C ++

7

Me encontré con una pregunta que preguntaba la diferencia entre las plantillas de funciones y las funciones de plantillas en C ++ y también las clases de plantillas y plantillas de clase.

Tenía la impresión de que las Plantillas de funciones y las Funciones de plantillas eran lo mismo. ¿Hay alguna diferencia entre los dos? Si es así, ¿cuál es?

    
pregunta nikhil 27.11.2011 - 12:50

6 respuestas

4
  

¿Hay alguna diferencia entre los dos? Si es así, ¿cuál es?

No hay diferencia en absoluto. Si plantillas de funciones y en alguna parte como función de plantilla .

  

Tenía la impresión de que las Plantillas de funciones y la Plantilla   Las funciones eran las mismas.

Tu entendimiento fue correcto.

    
respondido por el BЈовић 27.11.2011 - 13:23
10

Hay una diferencia entre la plantilla de función y la función de plantilla.

template<class Type>
void Foo(Type tData) {...}

si quisieras pasar int a la plantilla de función Foo, pero también quisiste que el compilador lo instanciara como si se hubiera pasado un doble al que llamarías:

Foo<double> ( 12 );

Que crea una instancia de la siguiente función de plantilla:

void Foo(double);

Con esta sintaxis especial Foo<>() , está exigiendo al compilador que cree una instancia de la función Foo para el tipo que se pasa explícitamente, y le pide al compilador que no deduzca el tipo por el argumento de la función.

Una plantilla de función es el cuerpo de una función que está entre corchetes alrededor de la palabra clave de la plantilla, que no es una función real, y no será compilada completamente por el compilador, y no es responsable por el enlazador. Al menos una llamada, para un tipo (s) de datos en particular, es necesaria para crear una instancia, y ser asignada a la responsabilidad del compilador y el enlazador. Por lo tanto, la instancia de la plantilla de función Foo se crea como Foo (int) o Foo (doble).

Una función de plantilla es simplemente una "instancia de una plantilla de función", que se produce cuando la llama, o que se crea una instancia para un tipo de datos en particular. La instancia de function-template es en realidad una función válida.

Una instancia de una plantilla de función (también llamada plantilla-función) no es una función normal, bajo el paraguas del sistema de decoración de nombres del compilador y el enlazador. Eso significa, una instancia de función-plantilla:

template<class T> 
void Foo(T data) {...}

para el argumento de plantilla doble, no es:

void Foo(double data) {...}

pero en realidad:

void Foo<double>(double x) {...}

Puedes leer más aquí:

Términos de la plantilla

Tutorial de plantilla

    
respondido por el BugShotGG 29.11.2013 - 17:48
3

clase de plantilla es un término que no debe usarse, se usa para designar lo que ahora llamamos una especialización de plantilla de clase desde al menos el estándar 98, pero la mayoría las personas que lo utilizan tienden a usarlo como sinónimo de plantilla de clase (y eso también fue cierto en el pasado, por lo tanto, la introducción de otro término inequívoco).

Del Manual de referencia de C ++ anotado (Ellis y Stroustrup, 1990):

  

Una plantilla de clase especifica cómo se pueden construir las clases individuales.

     

Una clase generada a partir de una plantilla de clase se denomina plantilla de clase .

    
respondido por el AProgrammer 28.11.2013 - 17:52
1

Son lo mismo. La Standardese es "plantilla de función" y "plantilla de clase", sin embargo, muchas personas (incluido yo mismo) tienden a referirse a ellas como "función de plantilla" y "clase de plantilla", por la razón simple y obvia de que cuando define una, primero escribe "plantilla" y luego escribes "clase", o una función. Por lo tanto, a menudo se les conoce como ambos.

    
respondido por el DeadMG 27.11.2011 - 13:59
-1

Hay una pequeña diferencia lógica entre la función de plantilla y la plantilla de función. La plantilla de función es la que se podría utilizar para crear una familia de funciones con diferentes tipos de argumentos. Plantilla de sintaxis              devuelve el tipo nombre_de_función (argumentos
             de tipo T)              {......               } Una función generada a partir de una plantilla de función se denomina función de plantilla.

    
respondido por el Vanchhit Choudhary 13.05.2016 - 05:36
-2
template <class T> T abs(T n) //function template
{ 
    return (n<0) ? -n : n; 
}

int main()
{
    int int1 = -10;
    cout << “\nabs(“ << int << “)=” << abs(int1);  //calling the abs function for type int 
}

Cuando el compilador ve una llamada a esa función, sabe que el tipo a usar es int porque ese es el tipo del argumento int1 . Así que genera una versión específica de la función abs() para el tipo int , sustituyendo int donde vea el nombre T en la plantilla de la función.

Esto se denomina instanciación de la plantilla de función, y cada versión instanciada de la función se denomina función de plantilla. Es decir, una función de plantilla es una instancia específica de una plantilla de función

    
respondido por el rahul kumap patel 28.11.2013 - 17:28

Lea otras preguntas en las etiquetas