Единственное решение, которое я когда-либо воображал для таких проблем, следует.Фактический выигрыш по описанному методу - прогрессивность эволюции.Здесь нет революций, иначе вы будете в беде очень быстро.
Вставьте новый класс cpp выше исходного основного класса.На данный момент он будет в основном перенаправлять все вызовы в текущий основной класс, но нацелен на то, чтобы сделать API этого нового класса максимально понятным и лаконичным.
Как только это будет сделано, вы получите возможность добавитьновые функциональные возможности в новых классах.
Что касается существующих функциональных возможностей, вы должны постепенно перемещать их в новые классы, поскольку они становятся достаточно стабильными.Вы потеряете помощь SCC для этого фрагмента кода, но с этим ничего не поделаешь.Просто выберите правильное время.
Я знаю, что это не идеально, хотя я надеюсь, что это может помочь, и процесс должен быть адаптирован к вашим потребностям!
Дополнительная информация
Обратите внимание, что Git - это SCC, который может следовать фрагментам кода из одного файла в другой.Я слышал хорошие новости об этом, так что это может помочь, когда вы постепенно продвигаете свою работу.
Git построен вокруг понятия BLOB-объектов, которые, если я правильно понимаю, представляют собой фрагменты файлов кода.Переместите эти части в разные файлы, и Git найдет их, даже если вы измените их.Кроме видео от Линуса Торвальдса , упомянутого в комментариях ниже, я не смог найти что-то ясное по этому поводу.