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