Dois exemplos de bibliotecas que usam construções modernas em C ++:
- As bibliotecas eigen e tatu (álgebra linear) usam várias construções modernas em C ++. Por exemplo, eles usam os dois modelos de expressão para simplificar expressões aritméticas e às vezes podem eliminar alguns temporários:
http://eigen.tuxfamily.org
http://arma.sourceforge.net/
http://hpac.rwth-aachen.de/teaching/sem-accg-14/Armadillo.pdf (apresentação sobre modelos de expressão em Armadillo)
- A biblioteca CGAL (geometria computacional) usa muitos recursos modernos do C ++ (usa fortemente modelos e especializações):
http://www.cgal.org
Nota:
construções modernas em C ++ são muito elegantes e podem ser muito divertidas de usar. É um ponto forte e um ponto fraco: ao usá-los, é tão tentador adicionar várias camadas de modelos / especializações / lambdas que, no final, você às vezes recebe mais "administração" do que código efetivo no programa (em outras palavras, seu programa "fala" mais sobre o problema do que descrever a solução). Encontrar o equilíbrio certo é muito sutil. Conclusão: é necessário rastrear a evolução da relação "sinal / ruído" no código medindo :
- quantas linhas de código no programa?
- quantas classes / modelos?
- tempo de execução ?
- consumo de memória?
Tudo o que aumenta os dois primeiros pode ser considerado como um custo (porque pode dificultar a compreensão e a manutenção do programa), tudo o que diminui os dois últimos é um ganho .
Por exemplo, a introdução de uma abstração (uma classe virtual ou um modelo) pode fatorar o código e tornar o programa mais simples ( ganho ), mas, se nunca for derivado / instanciado apenas uma vez, introduz um custo para nenhum ganho associado (novamente sutil porque o ganho pode vir mais tarde na evolução futura do programa; portanto, não existe uma "regra de ouro").
O conforto do programador também é um fator importante a ser levado em consideração no equilíbrio custo / ganho: com muitos modelos, o tempo de compilação pode aumentar significativamente e as mensagens de erro se tornam difíceis de analisar.
Veja também
Até que ponto é genérica e metaprogramação usando modelos C ++ útil em ciência da computação?