Especialização de Template em C++

Gosto muito de usar essa abordagem para resolver algumas necessidades do projeto, devido a facilidade que proporciona para o desenvolvedor usar uma classe dependendo da sua especialização.

Conforme no link do Github abaixo, mostro um exemplo de especialização, como explicarei a seguir:

https://github.com/fegomes/template

Imaginemos um cenário aonde precisamos de classes que implementa alguns tipos como int, string e double, estou representando como enum, mas poderia ser de outra forma.

enum etype {
    tint = 0,
    tstring = 1,
    tdouble = 2
};

 

Conforme o main do projeto do Github temos a seguinte situação:

int main()
{
    // temos o tipo tint, tstring e tdouble declarado
    type<etype::tint> age = 28;
    type<etype::tstring> name = "Fernando";
    type<etype::tdouble> height = 1.66;

    // somente a especialização tint tem a implementação da função increase
    age.increase(1);
    std::cout << age.str() << "-"<< age.ctype() << std::endl;
    std::cout << name.str() << "-" << name.ctype() << std::endl;

    // somente a especialização tdouble tem a implementação de round e truncate.
    std::cout << height.round() << "-" << height.truncate() << std::endl;

    return 0;
}

 

A diferença de usar especialização de template e herança é que a herança carrega todo o peso da classe pai ou das classes pais.

Gosta de usar template ou tem alguma dúvida? Deixe seu comentário!

Deixe um comentário