Два примера библиотек, использующих современные конструкции C ++:
- И библиотеки eigen и armadillo (линейная алгебра) используют несколько современных конструкций C ++. Например, они используют оба шаблона выражений для упрощения арифметических выражений и иногда могут исключать некоторые временные выражения:
http://eigen.tuxfamily.org
http://arma.sourceforge.net/
http://hpac.rwth-aachen.de/teaching/sem-accg-14/Armadillo.pdf (презентация по шаблонам выражений в броненосце)
- Библиотека CGAL (вычислительная геометрия) использует много современных функций C ++ (она интенсивно использует шаблоны и специализации):
http://www.cgal.org
Заметка:
современные конструкции C ++ очень элегантны и могут быть очень забавными в использовании. Это как сильная сторона, так и слабость: при использовании их настолько заманчиво добавить несколько слоев шаблонов / специализаций / лямбд, что в итоге иногда вы получаете больше «администрирования», чем эффективного кода в программе (другими словами, Ваша программа "говорит" больше о проблеме, чем о ее решении). Найти правильный баланс очень сложно. Вывод: необходимо отслеживать эволюцию отношения «сигнал / шум» в коде, измеряя :
- сколько строк кода в программе?
- сколько классов / шаблонов?
- Продолжительность ?
- потребление памяти?
Все, что увеличивает первые два, может рассматриваться как стоимость (потому что это может усложнить понимание и поддержку программы), все, что уменьшает последние два, является выгодой .
Например, введение абстракции (виртуальный класс или шаблон) может стать фактором кода и упростить программу ( усиление ), но если она никогда не создается и не запускается только один раз, то она вводит стоимость без ассоциированного усиления (опять же, это тонкий, потому что выигрыш может прийти позже в будущей эволюции программы, поэтому нет «золотого правила»).
Удобство программиста также является важным фактором, который необходимо учитывать при балансе затрат и выгод: при слишком большом количестве шаблонов время компиляции может значительно увеличиться, и сообщения об ошибках становятся трудными для анализа.
Смотрите также
В какой степени универсальное и метапрограммирование с использованием шаблонов C ++ полезно в вычислительной науке?