К сожалению, у вас не так много вариантов, и ни один не идеален.
Во-первых, два очевидных и неприемлемых решения:
- Вы можете объявить
typedef
, что полностью отрицает цель использования typedef
.
- Вы включаете файл, содержащий
typedef
, которого вы хотите избежать.
Более интересные решения:
- Включите все связанные
typedef
в один и тот же файл и включите этот файл. Это создает кодовую связь между классами. Вы должны делать это только со связанными классами, в противном случае вы получите файл включения бога, и это может привести к большой перекомпиляции при добавлении typedef
в этот файл.
- Для каждого класса есть отдельное включение с
typedef
в нем. Немного раздражает, но это работает.
Последние два похожи на предварительные объявления, но с добавленными typedef
с. Они уменьшают взаимозависимости файлов, поскольку вы редко изменяете файл typedef.
Я бы сказал, что для большинства ситуаций центральное включение имеет наибольшую пользу от хлопот. Просто будь осторожен.