Исходный код нашего приложения - сотни тысяч строк, тысячи файлов, а местами очень старые - приложение было впервые написано в 1995 или 1996 году. За последние несколько лет моя команда значительно улучшила качество источник, но остается одна проблема, особенно ошибка: у многих классов есть много методов, полностью определенных в их заголовочном файле.
У меня нет проблем с методами, объявленными inline в заголовке в некоторых случаях - конструктором структуры, простым методом, в котором inlining измеримо делает его быстрее (у нас есть некоторые математические функции, подобные этому) и т.д. Но либеральное использование встроенных методов без видимых причин:
- Грязный
- Трудно найти реализацию метода (особенно поиск по дереву классов для виртуальной функции, только для поиска одного класса была указана его версия в заголовке...)
- Вероятно, увеличивает размер скомпилированного кода
- Вероятно, проблемы для нашего компоновщика печально известны для больших кодовых баз. Справедливости ради, за последние несколько лет он стал намного лучше, но он не идеален.
Эта последняя причина может теперь вызвать проблемы для нас, и это хорошая причина пройти через кодовую базу и переместить большинство определений в исходный файл.
Наша кодовая база огромна. Есть ли автоматизированный инструмент, который может сделать (для большинства) это для нас?
Примечания:
- Мы используем Embarcadero RAD Studio 2010. Другими словами, диалект С++ включает VCL и другие расширения и т.д.
- Несколько заголовков являются автономными, но большинство из них сопряжено с соответствующим .cpp файлом, как обычно. Помимо расширения, имя файла одинаков, то есть, если есть методы, определенные в X.h, их можно перенести на X.cpp. Это также означает, что инструмент не должен обрабатывать синтаксический анализ всего проекта - возможно, он может просто анализировать отдельные пары файлов .cpp/.h, игнорировать включенные и т.д., Если он может надежно распознавать метод с определенным телом в объявлении класса и переместить его.