Подтвердить что ты не робот

Включить .cpp вместо заголовка (.h)

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

#include "example.cpp"

вместо

#include "example.h"

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

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

4b9b3361

Ответ 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.