Включить .cpp вместо заголовка (.h) - PullRequest
20 голосов
/ 13 февраля 2012

В некоторых случаях мы включаем файл .cpp вместо стандартного заголовочного файла (.h), например:

#include "example.cpp"

вместо

#include "example.h"

Кажется, это работаетно это безопасно или мне следует избегать этого?

А как насчет времени компиляции?

Ответы [ 4 ]

20 голосов
/ 13 февраля 2012

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

7 голосов
/ 24 июля 2013

Я согласен с Kerrek SB.

Я сделал это один раз. Я создавал отличную, широко используемую библиотеку сжатия, которую нужно было создавать отдельно для 8-битных изображений и для 12-битных изображений. Самым чистым способом, который я мог придумать, чтобы вписать это в систему сборки, было (немного упрощение) иметь два основных файла .cpp, один из которых устанавливает #defines для 8-разрядной сборки, а другой - для 12-разрядной сборки. Основные .cpp файлы затем #include исходные файлы библиотеки сжатия.

Можно не следовать общему правилу, если вы достаточно хорошо понимаете правило, чтобы знать его причины и причины, по которым оно может не применяться в вашем случае. (Но эти случаи должны быть редкими.)

3 голосов
/ 15 февраля 2012

Есть законные варианты использования #include "impl.cpp":

  1. проверка доступа к статическим переменным и т. Д.

  2. специальные шаблоны, подобные этим, если механизм шаблонов c ++ оказывается неадекватным (редким)

    #define MACRO (...)

    #include "impl.cpp" // uses MACRO

Обратите внимание, что #include "impl.cpp" может быть небезопасным, если один и тот же файл включен в отдельные блоки компиляции, которые впоследствии связаны друг с другом.

1 голос
/ 13 февраля 2012

Я использовал его раньше, и у меня не было проблем, но я не могу гарантировать, что это безопасно.Иногда это был единственный вариант для меня, поэтому я использовал его, в противном случае я буду использовать файл .h.

...