Página diagramada pelo Estagiário de Docência Rafael Rieder

Programação C/C++

Gabaritos - Templates


Prof. Márcio Sarroglia Pinho

Definições Exemplos de gabaritos de função Exemplos de gabaritos de classe

Definições

Templates são uma alternativa à sobrecarga de funções, quando estas envolvem lógicas de programas e operações idênticas para vários tipos de dados.

O uso de templates permite ao programador a implementação de um único código para uma determinada função. C++ gera automaticamente funções gabarito para tratar cada tipo de chamada realizada.

Para definir um gabarito de função, basta usar a palavra-chave template seguida da lista de parâmetros entre os símbolos < e >. Parâmetros devem ser precedidos da palavra-chave typename ou class, conforme mostra o exemplo abaixo:

template <typename tipoGenerico>  // ou template <class tipoGenerico>
tipoGenerico minhaFuncao(tipoGenerico valor1, tipoGenerico valor2)
{
  // código da função
}

int main()
{
  // meu código
}

Templates também pode ser usados para criar gabaritos de classe (classes genéricas). Neste caso, todos os seus métodos devem ser implementados no arquivo de cabeçalho, uma vez que o compilador gera automaticamente o código quando a palavra-chave template é encontrada.

/***** minhaClasse.h *****/

template <class Alpha>  // ou template <typename Alpha>
class minhaClasse
{
public:
  minhaClasse();
  void meuMetodo
(Alpha var);
private:
  
Alpha _var;
};

template <class T>
minhaClasse<T>::
minhaClasse() {
  // minha construtora
}

template <class T>
minhaClasse<T>::meuMetodo
(Alpha var) {
  _var = var;
}


Para utilizar este template e criar com ele novas classes, usa-se a sintaxe abaixo, na qual o tipo de dados colocado entre < > substituirá o tipo T utilizado na definição da classe genérica.

  minhaClasse<int> teste1;  // Cria uma classe na qual o template T será substituído por 'int'

  
minhaClasse<char*> teste2;  // Cria uma classe na qual o template T será substituído por 'char*'

  
minhaClasse<Pessoa> teste3;  // Cria uma classe na qual o template T será substituído por 'Pessoa'

Exemplo de gabarito de função

O código-fonte do Exemplo 1 pode ser obtido aqui.
O código-fonte do Exemplo 2 pode ser obtido aqui.

Exemplo de gabarito de classe

O código-fonte do Exemplo 1 pode ser obtido aqui.
O código-fonte do Exemplo 2 pode ser obtido aqui. Este exemplo implementa uma PILHA de objetos genéricos.