Включить .cpp вместо заголовка (.h)
Есть некоторые случаи, когда мы включаем файл .cpp вместо стандартного файла заголовка (.h), например:
#include "example.cpp"
вместо
#include "example.h"
Кажется, что это работает, но это безопасно или я должен его избегать?
Как насчет времени компиляции?
Ответы
Ответ 1
Это ленивое кодирование. Используйте заголовочные файлы. Да, они могут увеличить время компиляции, но они означают, что вы можете легко повторно реализовать куски вашего кода, или еще лучше, другой разработчик мог в любое время. Файл заголовка служит в качестве шаблона для вашего кода C/C++
. Это плохая идея отказаться или проигнорировать это.
Ответ 2
Я согласен с Kerrek SB.
Я сделал это один раз. Я создавал отличную, широко используемую библиотеку сжатия, которую нужно было разделить отдельно для 8-битных изображений и 12-битных изображений. Самый чистый способ, который я мог придумать, чтобы вписаться в систему сборки, был (слишком упрощает), чтобы иметь два основных файла .cpp, один из которых устанавливает #defines для 8-битной сборки, а другой для 12-битной сборки. Основные файлы .cpp затем # включают исходные файлы библиотеки сжатия.
Хорошо, если вы не будете следовать общему правилу, если вы достаточно хорошо понимаете это правило, чтобы знать причины этого и почему оно может не применяться в вашем случае. (Но эти случаи должны быть редкими.)
Ответ 3
Для #include "impl.cpp"
допустимы следующие действия:
-
тестирование доступа к статическим /etc переменным
-
специальные шаблоны, подобные этим, если механизм шаблона С++ оказывается неадекватным (редко)
#define MACRO (...)
#include "impl.cpp" // uses MACRO
Обратите внимание, что #include "impl.cpp"
может быть небезопасным, этот же файл включен в отдельные единицы компиляции, которые позже связаны друг с другом.
Ответ 4
Я использовал его раньше и не имел никаких проблем, но я не могу гарантировать, что это безопасно. Иногда это был единственный вариант для меня, поэтому я использовал его, иначе я буду использовать файл .h.