Я не уверен, почему это было бы хорошей практикой.
С другой стороны, не , включая ненужные файлы в X.h
, я считаю очень хорошей практикой.
Например, в следующем сценарии:
X.h
#include "Y.h"
class X
{
private:
Y * m_pY;
public:
X();
~X();
}
Было бы достаточно форвард объявить Y
. Клиенты класса X
не должны платить за включение файла заголовка для Y
:
X.h
class Y; // include Y.h in X.cc instead
class X
{
private:
Y * m_pY;
public:
X();
~X();
}
Это возможно в заголовочном файле, потому что объявление класса X
не требует специальных сведений о Y
(например, размер экземпляра); только то, что Y
является классом. Кроме того, клиенты класса X
никогда не имеют дело с типом Y
, поскольку он не является частью открытого интерфейса X
.
В больших проектах избегание ненужных директив include в заголовочных файлах может значительно сократить время сборки.
Он также может не загрязнять пространство имен пользователей вашего класса символами из ваших классов / классов реализации.