В идеале мне нужен один класс для каждого файла или, если у меня есть функции, не являющиеся членами, одна функция для каждого файла. Причины следующие:
- Когда я читаю код, я всегда буду знать, в каком файле я должен найти определенную функцию или класс.
- Если это один класс или одна функция, не являющаяся членом, на каждый заголовочный файл, то я не буду включать в себя весь беспорядок, когда включаю заголовочный файл.
- Если я внесу небольшое изменение в функцию, то перекомпилировать придется только эту функцию.
/>
However, splitting everything into many header and implementation files can slow down compilation. Большинство функций обращаются к ряду шаблонных других библиотечных функций, поэтому код будет компилироваться снова и снова, по одному разу для каждого файла реализации. Compiling my whole project takes 45 minutes. Имеется около 50 объектных файлов; каждый из них использует одни и те же дорогостоящие для компиляции заголовки.
Приемлемо ли иметь один класс (или функцию, не являющуюся членом) для каждого файла header, но помещать реализации многих или всех этих функций в один файл реализации, как в следующем примере?
Код: Выделить всё
// foo.h
void foo(int n);
// bar.h
void bar(double d);
// foobar.cpp
#include
void foo(int n) { std::vector v; ... }
void bar(double d) { std::vector w; ... }
Опять же, преимуществом будет то, что я могу включить только функцию foo или только функцию bar, и компиляция проекта будет быстрее, поскольку foobar.cpp — это один файл, поэтому std::vector (просто пример какой-то другой дорогой в компиляции шаблонной конструкции) должен быть скомпилирован только один раз, а не дважды, если я скомпилировал foo.cpp и bar.cpp отдельно. Конечно, моя причина (3) неприменима для этого сценария: после простого изменения foo(){... мне придется перекомпилировать весь файл foobar.cpp.
Мне интересно ваше мнение!
Подробнее здесь:
https://stackoverflow.com/questions/531 ... ion-per-fi