Home > Tecnologia > Informática > Programação > C++ > Funções template em C++

Funções template em C++

Num artigo anterior, falei da classe template em C++. Agora, vou abordar as funções template. De forma análoga a uma classe template, uma função template permite definir uma função em que o valor de retorno e/ou os parâmetros sejam de um tipo genérico. Ainda, o seu código também só será gerado pelo compilador, quando este encontra utilizações destas funções.

Para fazer um paralelismo com a classe template do artigo anterior, vamos agora ver duas funções que recebem dois valores de tipo genérico e, uma devolve qual o valor maior (max) e a outra devolve qual o valor menor (min).

Vamos começar por ver a função “max”:

template <typename T>
T max(T &val1, T &val2) {
    return (val1 > val2 ? val1 : val2);
}

Na declaração “template <typename T>” na primeira linha, estamos a indicar ao compilador que vamos usar um template com um tipo de dados genérico “T“. Esse “T” é usado como retorno da função e como parâmetros (val1 e val2), como vemos na segunda linha. Ainda, de notar o uso do símbolo “&” nos parâmetros. Isto porque, numa função “template” devemos indicar, nos parâmetros, se pretendemos um endereço de uma variável ou um apontador. Caso não o façamos, ao evocar esta função, passando uma variável, o compilador irá dar um erro a dizer que a chamada da função é ambígua.

Vejamos um exemplo, assumindo que temos duas variáveis inteiras, i1 e i2:

    cout << "O inteiro maior é: " << max(i1, i2) << endl;

Vamos ver agora a função “min”:

template <typename T>
T min(T &val1, T &val2) {
    return (val1 < val2 ? val1 : val2);
}

De forma semelhante à função “max”, voltamos a indicar que estamos perante um template com um tipo genérico “T”. Vejamos como evocar a função com os inteiros i1 e i2:

    cout << "O inteiro menor é: " << min(i1, i2) << endl;



O seguinte programa completo utiliza três tipos de dados diferentes para as funções “max” e “min”:

#include <iostream>
#include <stdlib.h>
#include <string>

using namespace std;

template <typename T>
T max(T &val1, T &val2) {
    return (val1 > val2 ? val1 : val2);
}

template <typename T>
T min(T &val1, T &val2) {
    return (val1 < val2 ? val1 : val2);
}

int main() {
    int i1, i2;
    float f1, f2;
    string s1, s2;
    cout << "Introduza dois valores inteiros:" << endl;
    cin >> i1;
    cin >> i2;
    cout << "O inteiro maior é: " << max(i1, i2) << endl;
    cout << "O inteiro menor é: " << min(i1, i2) << endl;
    cout << "Introduza dois valores do tipo float:" << endl;
    cin >> f1;
    cin >> f2;
    cout << "O float maior é: " << max(f1, f2) << endl;
    cout << "O float menor é: " << min(f1, f2) << endl;
    cout << "Introduza 2 strings:" << endl;
    cin >> s1;
    cin >> s2;
    cout << "A string maior é: " << max(s1, s2) << endl;
    cout << "A string menor é: " << min(s1, s2) << endl;
}

Exemplo da execução do programa:

Introduza dois valores inteiros:
120
90
O inteiro maior é: 120
O inteiro menor é: 90
Introduza dois valores do tipo float:
14.5
22.6
O float maior é: 22.6
O float menor é: 14.5
Introduza 2 strings:
def
abc
A string maior é: def
A string menor é: abc



Siga-nos nas redes sociais e esteja a par das nossas novidades no nosso blogue multi-temático Out4Mind!

Este artigo foi escrito de acordo com a antiga grafia.

About Carlos Santos

Frequência em mestrado de Engenharia Electrotécnica e de Computadores. Programador freelancer: Websites, Aplicações Web (JAVA e PHP), J2SE/J2EE, C/C++ e Android. Explicador e formador em informática, matemática e electrotecnia. Formação presencial ou remota através de Skype e Team Viewer. Interesses: Música, áudio, vídeo, ciência, astronomia e mitologia.

Leave a Reply

Your email address will not be published and it is optional.