В Эффективном C++ (3-е издание) Скотт Мейерс в пункте 31 предполагает, что классы должны иметь, помимо своей классической Декларации (. h) и определения (.cpp), файл декларации Forward Forward Include (fwd.h), который может не использоваться для полного определения, а не для объявления вперед.Вперед декларация включает, помимо объявления включить (ClassFwd.h + Class.h)
Я немного смотрю на это дело, но я действительно не вижу в этом жизнеспособного варианта ... Кажется, очень трудно поддерживать, а скорее излишне и вряд ли нужно.
Я могу, однако, увидеть его использование для форвардных объявлений шаблонов, которые довольно тяжелые. Но для простых классов? Похоже, что это боль в обслуживании и создаст много почти пустых файлов, которые служат очень маленькой цели ... стоит ли хлопот?
Вот пример:
// Class.h
class Class
{
Class();
~Class();
};
// ClassFwd.h
class Class;
// Class.cpp
Class::Class()
{
}
Class::~Class()
{
}
Мой вопрос:
Что вы думаете, ребята? Если это хорошая практика?
ПРИМЕЧАНИЕ Меня больше интересуют аргументы. Для этой практики, чтобы увидеть, пропустил ли я что-то, что позволило бы мне согласиться с Скоттом Мейерсом.
Спасибо за ответ, однако, вы просто заявляете, что делаете, а не почему вы это делаете. Единственный аргумент, который вы предоставляете, - это shared_ptr, который я уже решил, имея макрос FORWARD_SHARED(), который автоматически объявляет класс и его указатель автоматически. Это очень легкий и легкий для чтения ... – Geeho
Хорошо, причина заключается в сокращении времени компиляции и централизации форвардных объявлений. Если все форвардные объявления находятся в одном файле, при добавлении новых классов легко добавлять новые. То же самое с указателем typedefs. Почему сокращение времени компиляции должно быть очевидным. Это имеет смысл для вас? Хранение файлов заголовков чистым от чего угодно, но форвардные объявления помогут, поскольку ваша кодовая база становится больше. –
Ах! Итак, у вас есть один файл Fwd.h! Не один за заголовок! Теперь я вижу, как это может иметь смысл ... Хорошо, подумай об этом некоторое время ... – Geeho