Хорошо известно, что использование форвардных объявлений предпочтительнее использовать #includes в заголовочных файлах, но какой лучший способ управлять форвардными объявлениями?
Некоторое время я вручную добавлял в каждый заголовочный файл передовые объявления, которые были нужны этому заголовочному файлу. Тем не менее, я закончил с кучей файлов заголовков, повторяя те же самые полдюжины или около того вперед деклараций, которые кажутся излишними, и сохранение этих повторяющихся списков стало немного утомительным.
Передовые декларации typedefs (например, struct SensorRecordId; typedef std::vector<SensorRecordId> SensorRecordIdList;
) также немного дублируют несколько файлов заголовков.
Итак, я создал файл ProjectForwards.h
, содержащий все мои передовые объявления, и включил его там, где это было необходимо. Поначалу это казалось хорошей идеей - гораздо меньшей избыточностью и намного более легким обслуживанием typedefs. Но теперь, в результате использования ProjectForwards.h
так сильно, всякий раз, когда я добавляю в него новый класс, мне приходится восстанавливать мир, который замедляет развитие.
Итак, что лучший способ управлять форвардными объявлениями? Должен ли я кусать пулю и повторять отдельные декларации в разных подсистемах? Продолжить с подходом ProjectForwards.h
? Попробуйте разделить ProjectForwards.h
на несколько файлов SubsystemForwards.h
? Некоторое другое решение, о котором я не замечаю?