Compartilhar via


Modelos de função

Os modelos de classe definem uma família de classes relacionadas que se baseiam os argumentos de tipo passados para a classe na instanciação.Os modelos de função são semelhantes aos modelos de classe mas define uma família de funções.Com os modelos de função, você pode especificar um conjunto de funções que são baseados no mesmo código mas act em diferentes tipos ou classes.O modelo de função a seguir troca dois itens:

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

Esse código define uma família de funções que troca os valores dos argumentos.Com base neste modelo, você pode gerar funções serão trocar int e longo tipos e também os tipos definidos pelo usuário.MySwapainda será trocar classes se o construtor da classe e o operador de atribuição são definidas corretamente.

Além disso, o modelo de função impedirá de troca de objetos de tipos diferentes, porque o compilador sabe os tipos da a e b parâmetros em tempo de compilação.

Embora essa função poderia ser executada por uma função de nontemplated, o uso de ponteiros void, a versão de modelo é typesafe.Considere as seguintes chamadas:

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

A segunda MySwap chamada acionará um erro de tempo de compilação, porque o compilador não é possível gerar um MySwap função com parâmetros de tipos diferentes.Se foram usados ponteiros void, tanto chamadas de função seriam compilar corretamente, mas a função não funcionará corretamente em tempo de execução.

Especificação explícita dos argumentos de modelo para um modelo de função é permitida.Por exemplo:

// 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.
}

Quando o argumento de modelo é especificado explicitamente, normais conversões implícitas são feitas para converter o argumento de função para o tipo dos parâmetros de modelos de função correspondente.No exemplo acima, o compilador irá converter (char j) para digitar int.

Consulte também

Referência

Instanciação de modelo de função

Instanciação explícita

Especialização explícita de modelos de função

Outros recursos

Modelos