Насколько я понимаю, вас больше всего интересуют времена сборки и ремонтопригодность вашей библиотеки?
Во-первых, не пытайтесь «исправить» все сразу.
Во-вторых, поймите, что вы исправите. Частота шаблона часто возникает по причине, например. для обеспечения определенного использования и заставить компилятор помочь вам не ошибиться. Эту причину иногда можно отнести далеко, но выкидывать 100 строк, потому что «никто действительно не знает, что они делают» не следует воспринимать легкомысленно. Все, что я предлагаю здесь, может ввести очень неприятные ошибки, вас предупредили.
В-третьих, сначала рассмотрите более дешевые исправления: например. более быстрые машины или распределенные инструменты сборки. По крайней мере, выбросьте всю RAM, которую возьмут доски, и выбросите старые диски. Это различие. Один диск для ОС, один диск для сборки - дешевый RAID.
Является ли библиотека хорошо документированной? Это ваш лучший шанс сделать это. Посмотрите на такие инструменты, как doxygen, которые помогут вам создать такую документацию.
Все считается? Хорошо, теперь некоторые предложения по времени сборки;)
Поймите build model C++: каждый .cpp составляется индивидуально. Это означает, что многие .cpp-файлы со многими заголовками = огромная сборка. Это НЕ советую поместить все в один .cpp-файл, хотя! Однако один трюк (!), Который может ускорить сборку, - это создать один .cpp-файл, который включает в себя кучу .cpp-файлов и только передать этот «главный» файл компилятору. Вы не можете сделать это слепо, однако - вам нужно понять, какие ошибки могут возникнуть.
Если у вас его еще нет, получите отдельную машину для сборки, в которой вы можете удаленно.Вам нужно будет сделать много почти полных сборок, чтобы проверить, были ли вы сломаны некоторые из них. Вы захотите запустить это на другой машине, которая не блокирует вас от работы над чем-то другим. В долгосрочной перспективе вам понадобится ежедневная интеграция сборов;)
Используйте предварительно скомпилированные заголовки. см. выше)
Проверьте политику включения заголовка. Хотя каждый файл должен быть «независимым» (т. Е. Включать все, что он должен быть включен кем-то другим), не включайте в себя либерально. К сожалению, я еще не нашел инструмент для поиска ненужных операторов #incldue, но это может помочь потратить некоторое время на удаление неиспользуемых заголовков в файлах «hotspot».
Создайте и используйте форвардные объявления для шаблонов, которые вы используете. Часто вы можете включать заголовок с объявлениями forwad во многих местах и использовать полный заголовок только в нескольких конкретных. Это может значительно облегчить компиляцию. Проверьте заголовок <iosfwd>
, как это делает стандартная библиотека для потоков ввода-вывода.
перегрузки для шаблонов для нескольких типов: Если у вас есть сложный шаблон функции, которая полезна только для очень немногих видов, как это:
// .h
template <typename FLOAT> // float or double only
FLOAT CalcIt(int len, FLOAT * values) { ... }
Вы можете объявить перегрузки в заголовке, и движение шаблон для тела:
// .h
float CalcIt(int len, float * values);
double CalcIt(int len, double * values);
// .cpp
template <typename FLOAT> // float or double only
FLOAT CalcItT(int len, FLOAT * values) { ... }
float CalcIt(int len, float * values) { return CalcItT(len, values); }
double CalcIt(int len, double * values) { return CalcItT(len, values); }
это перемещает длинный шаблон в единый блок компиляции.
К сожалению, это только ограниченное использование для классов.
Проверьте, может ли код the PIMPL idiom переместить код из заголовков в файлы .cpp.
Общее правило, которое скрывается за этим - , отделяет интерфейс вашей библиотеки от реализации. Используйте комментарии, detail
namesapces и отдельные заголовки .impl.h
, чтобы мысленно и физически изолировать то, что должно быть известно снаружи, от того, как это делается. Это раскрывает реальную ценность вашей библиотеки (действительно ли она инкапсулирует сложность?) И дает вам возможность сначала заменить «простые цели».
Более конкретный совет - и насколько полезен данный данный параметр - во многом зависит от фактической библиотеки.
Удачи вам!
Хорошие баллы! Спасибо, что заставил меня думать в другом направлении. – 2008-11-27 17:22:40