Deux exemples de bibliothèques qui utilisent des constructions C ++ modernes:
- Les bibliothèques propres et tatou (algèbre linéaire) utilisent plusieurs constructions C ++ modernes. Par exemple, ils utilisent les deux modèles d'expression pour simplifier les expressions arithmétiques et peuvent parfois éliminer certains temporaires:
http://eigen.tuxfamily.org
http://arma.sourceforge.net/
http://hpac.rwth-aachen.de/teaching/sem-accg-14/Armadillo.pdf (présentation sur les modèles d'expression dans Armadillo)
- La bibliothèque CGAL (géométrie informatique) utilise de nombreuses fonctionnalités C ++ modernes (elle utilise fortement des modèles et des spécialisations):
http://www.cgal.org
Remarque:
Les constructions C ++ modernes sont très élégantes et peuvent être très amusantes à utiliser. C'est à la fois un point fort et une faiblesse: lors de leur utilisation, il est si tentant d'ajouter plusieurs couches de modèles / spécialisations / lambdas qu'au final, vous obtenez parfois plus "d'administration" que de code efficace dans le programme (en d'autres termes, votre programme "parle" davantage du problème que de la description de la solution). Trouver le bon équilibre est très subtil. Conclusion: il faut suivre l'évolution du rapport "signal / bruit" dans le code en mesurant :
- combien de lignes de code dans le programme?
- combien de classes / modèles?
- temps de course?
- consommation de mémoire?
Tout ce qui augmente les deux premiers peut être considéré comme un coût (car cela peut rendre le programme plus difficile à comprendre et à maintenir), tout ce qui diminue les deux derniers est un gain .
Par exemple, l'introduction d'une abstraction (une classe virtuelle ou un modèle) peut factoriser le code et rendre le programme plus simple ( gain ), mais s'il n'est jamais dérivé / instancié une seule fois, il introduit un coût pour aucun gain associé (encore une fois, il est subtile car le gain peut venir plus tard dans l'évolution future du programme, il n'y a donc pas de "règle d'or").
Le confort du programmeur est également un facteur important à prendre en compte dans l'équilibre coût / gain: avec trop de modèles, le temps de compilation peut augmenter considérablement et les messages d'erreur deviennent difficiles à analyser.
Voir également
Dans quelle mesure les génériques et la méta-programmation utilisant des modèles C ++ sont-ils utiles en science informatique?