Compartir a través de


Plantillas de función

Las plantillas de clase definen una familia de clases relacionadas que están basados en los argumentos de tipo pasados a la clase sobre la creación de instancias.Plantillas de función son similares a las plantillas de clase pero definen una familia de funciones.Con las plantillas de función, puede especificar un conjunto de funciones que están basados en el mismo código pero se aplican a tipos diferentes o clases.La siguiente plantilla de función intercambia dos elementos:

// function_templates1.cpp
template< class T > void MySwap( T& a, T& b ) {
   T c(a); 
   a = b; 
   b = c;
}
int main() {
}

Este código define una familia de funciones que cambian los valores de los argumentos.En esta plantilla, puede generar las funciones que intercambiarán int y tipos y también los tipos definidos por el usuario de Más .MySwap incluso cambiará clases si el constructor y el operador de asignación de copia de la clase son correctamente definido.

Además, la plantilla de función evitará que se cambie objetos de diferentes tipos, porque el compilador conoce a los tipos de los parámetros de a y de b en tiempo de compilación.

Aunque esta función se puede realizar mediante una función nontemplated, mediante punteros vacíos, la versión de la plantilla sea seguridad.considere las llamadas siguientes:

int j = 10;
int k = 18;
CString Hello = "Hello, Windows!";
MySwap( j, k );          //OK
MySwap( j, Hello );      //error

La segunda llamada de MySwap desencadena un error en tiempo de compilación, porque el compilador no puede generar una función de MySwap con parámetros de tipos diferentes.Si los punteros vacíos se utilizados, las dos llamadas de función compilarían correctamente, pero la función no funcionaría correctamente en tiempo de ejecución.

La especificación explícita de los argumentos de plantilla para una plantilla de función se permite.Por ejemplo:

// function_templates2.cpp
template<class T> void f(T) {}
int main(int j) {
   f<char>(j);   // Generate the specialization f(char).
   // If not explicitly specified, f(int) would be deduced.
}

Cuando el argumento de plantilla se especifica explícitamente, las conversiones implícitas normales se realizan convertir el argumento de la función al tipo de los parámetros correspondientes de la función.En el ejemplo anterior, el compilador convierte (char j) para escribir int.

Vea también

Referencia

Instancia de una plantilla de función

Creación de instancias explícita

Specialization explícito de plantillas de función

Otros recursos

Plantillas