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