Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: BLACKBOX
Por ZIPPO
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Artigo

Compilando Templates C++
Linux user
hbobenicio
05/03/2008
Neste artigo você verá um pouco sobre como Templates C++ funcionam e sobre técnicas de como compilá-los num ambiente modularizado.
[ Hits: 13701 ]
Conceito: 10.0   2 voto(s)2 voto(s)2 voto(s)2 voto(s)2 voto(s) + quero dar nota ao artigo

Entendendo melhor o problema

Primeiro, antes de resolver este impasse, vale a pena conferir como os templates em C++ funcionam. Com eles você pode escrever um código genérico ao se abstrair do tipo de variável do qual estamos tratando. Por exemplo:



Com este código, criamos uma função capaz de retornar a soma de 2 números. Mas então, você pode se perguntar: "Como o compilador vai saber a qual tipo de variável estamos nos referindo? Afinal, o código precisa ser compilado. E o compilador precisa saber o espaço que precisará alocar, caso a função seja chamada, e armazenar essa informação no binário gerado pela compilação."

É verdade, o compilador precisa dessa informação. E ele o obtém na hora da aplicação da função, ou seja, na hora em que chamarmos a função. Dessa forma, ao encontrar o código:



o compilador irá saber de que se trata de um:



e irá gerar o código necessário para tal função. E, se no mesmo código, tiver mais um:



o compilador irá gerar um código para double's também (da mesma forma que o anterior).

Próxima página >>




Páginas do artigo

Outros artigos deste autor
Nenhum artigo encontrado.

Leitura recomendada

Comentários
[1] Comentário enviado por humbhenri em 05/03/2008 - 11:12h:

Muito bom o artigo, parabéns. Pelo que eu me lembre na STL eles usam a solução 1.

[2] Comentário enviado por an_drade em 05/03/2008 - 12:07h:

Olá hbobenicio,

Na realidade, você não compila o Template e seu código, e sim o código que usa este. Isto pode parecer uma boa solução (na realidade, o é) mas tem um inconveniente muito ruim: se você usa este template em 10 lugares diferentes em seu código (sei lá, imagine 10 classes distintas), o código do template será compilado 10 vezes. Isso é péssimo para programas grandes, onde temos bem mais de 10 classes distintas (ou mesmo, pedaços de códigos espalhados por vários arquivos). É só tentar compilar o Firefox ou o KDE (se não me engano, os 2 usam muitas das classes STL).

Uma vez li em algum lugar que existe uma maneira de pré-compilar estes templates, um processo parecido com pré-compilação dos arquivos de cabeçalho, aumentando a velocidade total de compilação. Este processo gera um código intermediário otimizado que facilita a compilação dos códigos que a utilizam.

[]'s

Carlos

[3] Comentário enviado por hbobenicio em 05/03/2008 - 12:42h:

an_drade,

é verdade, os templates só podem ser compilados se não forem separados do código que os chamam, não tem como fugir disso. Na verdade é assim que eles funcionam... o compilador descobre quais são os tipos que o seu código usa/precisa e gera a informação necessária.

Essas, como eu cito no artigo, são os métodos "mais fáceis" de se fazer tão "façanha". O que é feito é uma simulação dos padrões de modularização.

Condordo, quando o programa toma grande dimensões é desaconselhável que se use muito (ou mesmo algum) templates no seu código. É o famoso TRADE-OFF: templates podem ser "uma mão na roda" r diminuir muito trabalho, mas se o projeto ganha proporções muito
grandes, podemos ter problemas como os citados por você. Cabe a cada programador fazer sua escolha :D

abraços e obrigado pelo comentário. (pro humbhenri também).

[4] Comentário enviado por hbobenicio em 05/03/2008 - 12:44h:

É... Talvez eu devesse ter colocado como título do artigo:

" 'Compilando' templates C++"

ou

" 'Simulando' uma modularização com templates C++ "

ao invés de:

" Compilando templates C++ "

[5] Comentário enviado por daniel.franca em 23/05/2008 - 13:19h:

Bom o artigo.
Fiquei com uma duvida, vc cita o fato do código ficar visivel a quem for usa-lo pelo primeiro método. Porém no segundo metodo isso tb ocorre já que o codigo fonte (.cpp) não poderá estar compilado.

Vi q vc tratá bastante de C nos artigos, eu encontrei um tutorial de ponteiros na internet, o achei muito bom. Eu postei ele no meu blog, se quiser conferir está em: http://tecnosapiens.wordpress.com
Dicas de posts e comentários tb são bem vindos.

[6] Comentário enviado por metalpunkpointer em 31/08/2010 - 11:31h:

boa explicação, só não entendi aonde vc incluiu o header do stl...


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.