2010-12-10 6 views
1

Я использую C++, и я рассматриваю возможность включения моей функции в .h. Я знаю, что файл .h предназначен для определений, а .cpp - для реализаций, но как разделить все файлы на заголовки и источники, мне пригодится. Хорошо, если бы моей целью было создать статическую или динамическую библиотеку, чем, конечно, это изменило бы, но я создаю этот код для себя и не планирую делать из него библиотеку. Так есть ли другое преимущество от расщепления источника от определения?Преимущества разбиения интерфейса и реализации в C++

+0

Вы могли бы сделать еще больше разделения и сократить время компиляции с помощью Pimpl идиомы: http://gotw.ca/gotw/024.htm – hansmaad 2010-12-10 14:53:06

ответ

7

Очевидная цель - уменьшить сцепление: как только вы измените заголовочный файл, все, что включает в себя это должно быть перекомпилировано. Это может быстро отразиться на влиянии на время компиляции (даже в небольшом проекте).

+0

+1 сцепка так же важно, как строить раз. возможно, более важно. У меня есть странная идея, что, поскольку набор инструментов Borland Turbo продемонстрировал чрезвычайно быструю компиляцию, возможно, наши текущие инструменты (которые пытаются диагностировать как можно больше ошибок, но где только первая диагностика выше 70% надежна) делают вещи неуловимо, бесполезно неэффективны на несколько порядков ... – 2010-12-10 14:48:53

2

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

2

В зависимости от размера вашего проекта он сэкономит вам время компиляции и даст возможность узнать все ресурсы и т. Д. (Если только вы не помещаете все в один файл).

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

1

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

Другим является то, что он следует за конвенцией (и стандартным правилом определения стандарта), поэтому другим будет намного легче разобраться и понять.

0

Это зависит от размера проекта. До приблизительно 500 LOC, Я стараюсь поместить все в один файл с определениями в классе. За исключением того, что до 500 LOC, Я обычно использую более простой язык, чем C++; что-то вроде AWK.

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

- Джеймс Kanze