Действительно ли это - хорошая практика, чтобы всегда создать .cpp для каждого.h в проекте C++?

GUID могут вызвать Вас большая проблема в будущем, если они используются в качестве "uniqifiers", позволяя дублированным данным войти в Ваши таблицы. Если Вы хотите использовать GUID, рассмотрите все еще поддерживающие ограничения UNIQUE на другой столбец (столбцы).

7
задан lurks 29 October 2009 в 17:28
поделиться

8 ответов

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

В общем, для использования вашего класса в любом случае потребуется только файл заголовка - я не вижу преимуществ «пустого» файла .cpp для согласованности в проект.

14
ответ дан 6 December 2019 в 05:38
поделиться

Это действительно лошади для курсов:

  • Классы только для заголовков: например, шаблон классы
  • Заголовок и cpp: разделяет объявление из реализации.
  • Только cpp: ваш main () может жить в одном из них.

Только исходный код заголовочного файла иногда является единственным способом написания повторно используемых шаблонов. См. Множество примеров в boost .

Заголовок и cpp более «нормальны». Он отделяет объявление от реализации и может ускорить компиляцию, когда компилятору не нужно много раз читать реализации. Вы можете начать здесь, а затем посмотреть, как идет реализация, и если файл cpp станет пустым, вы можете его удалить.
Еще один момент здесь заключается в том, что у вас будет ваш #include "foo.h" в верхней части foo.cpp , чтобы доказать, что кто-то другой может это сделать и не имеет ошибок компилятора.

Файлы только cpp. main () может находиться здесь, и я поместил тестовые классы cppUnit в такие файлы.

3
ответ дан 6 December 2019 в 05:38
поделиться

Нет. Если в .cpp ничего не должно быть, то он вам и не нужен.

8
ответ дан 6 December 2019 в 05:38
поделиться

Практическое правило: храните связанные классы вместе в одном файле. В основном разные классы необходимо помещать в свои собственные файлы .hpp и .cpp. Причина этого в том, что в больших проектах у вас есть до 10 000 классов, и размещение этого количества файлов перед пользователем и IDE обычно приводит к поломке.

1
ответ дан 6 December 2019 в 05:38
поделиться

Есть очень полезные и успешные библиотеки, такие как многие в boost , которые предназначены только для заголовков.

1
ответ дан 6 December 2019 в 05:38
поделиться

См. Также этот вопрос - файлы заголовков должны быть только для объявлений.

Если у вас есть компилируемый код, включенный в несколько мест (из вашего комментария: "sould Я избегаю создания файла .cpp и написания кода непосредственно в файле заголовка? "), Он будет каждый раз компилироваться (хотя у вас могут быть предварительно скомпилированные заголовки), а компоновщик разрешит (или нет) раздутый объектный код.

Тот факт, что определение класса невелико, не означает, что он должен быть в файле заголовка, если только определение не совпадает с объявлением - например, чистый виртуальный класс или простой тип, упомянутый в другом ответе.

1
ответ дан 6 December 2019 в 05:38
поделиться

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

Для дальнейшего обсуждения этого проблема, вы можете проверить этот мой старый вопрос: Код C ++ в файлах заголовков . Я не думаю, что ваш вопрос является точным дубликатом, но он достаточно близок, чтобы вам следовало его прочитать.

1
ответ дан 6 December 2019 в 05:38
поделиться

Если некоторые классы короткие и кажутся встроенными, я стараюсь объединить их все в types.h - единственный заголовок, который я не считаю заслуживают .cpp файла.

Однако большинство классов переросли как возможность перейти только в заголовок, так и возможность перейти в types.h .

Несколько примеров из того, что я делаю. Я считаю, что класс для реализации трехмерного вектора Vector3 заслуживает своих .h и .cpp, несмотря на свою простоту. Но позиция на самом деле этого не заслуживает; в конце концов, это была бы даже структура POD, если бы не этот надоедливый getDistance () , который мне нравится реализовывать там.

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

1
ответ дан 6 December 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: