Я игнорирую искажение имени C ++ здесь ради простоты

лю организовывать свой код, поэтому в идеале мне нужен один класс на файл или, если у меня есть функции, не являющиеся членами, одна функция на файл.

Причины:

Когда я читаю код, я всегда буду знать, в каком файле я должен найти определенную функцию или класс.

Если это один класс или одна не-функция для каждого заголовочного файла, тогда я не буду включать весь беспорядок, когда яinclude заголовочный файл.

Если я внесу небольшое изменение в функцию, то будет перекомпилирована только эта функция.

Однако разбиение всего на несколько заголовков и множество файлов реализации может существенно замедлить компиляцию. В моем проекте большинство функций получают доступ к определенному числу шаблонных других библиотечных функций. Таким образом, этот код будет компилироваться снова и снова, один раз для каждого файла реализации. Компиляция всего моего проекта в настоящее время занимает около 45 минут на одной машине. Существует около 50 объектных файлов, каждый из которых использует одни и те же дорогие для компиляции заголовки.

Может быть, допустимо иметь один класс (или функцию, не являющуюся членом)заголовок файл, но положить реализации многих или всех этих функций водин Файл реализации, как в следующем примере?

// foo.h
void foo(int n);

// bar.h
void bar(double d);

// foobar.cpp
#include <vector>
void foo(int n) { std::vector<int> v; ... }
void bar(double d) { std::vector<int> w; ... }

Опять же, преимущество заключается в том, что я могу включить только функцию foo или просто функцию bar, и компиляция всего проекта будет быстрее, потому чтоfoobar.cpp являетсяодин файл, так чтоstd::vector<int> (который является здесь только примером для некоторой другой дорогой для компиляции шаблонной конструкции) должен быть скомпилирован только один раз, в отличие от двух, если я скомпилировалfoo.cpp а такжеbar.cpp отдельно. Конечно, моя причина (3) выше недопустима для этого сценария: после простого изменения foo () {...} я должен перекомпилировать весь, потенциально большой, файлfoobar.cpp.

Мне любопытно, каково ваше мнение!

Ответы на вопрос(9)

Ваш ответ на вопрос