У меня есть программный проект, который работает отлично. Теперь этот проект должен быть скорректирован для моделирования новой, но связанной с ней системы. Какие стратегии должны быть хорошо организованы для этих двух кодов? У них будет кодовая база, которая примерно на 90% одинакова, но есть много функций, которые нуждаются в небольших настройках.Элегантный способ обработки аналогичного кода
Я подумал следующее:
- Различные ветви в GIT-репозитории: совершенный контроль над двумя проектами, но общие изменения должны быть сделаны в каждой из ветвей отдельно.
- Моделирование различных программных режимов с помощью C++ pragmas (#ifdef Project1 ...): сохраняет локальные изменения, но делает код трудным для чтения.
Я не очень доволен этими решениями. Есть ли лучший подход?
Альтернатива множеству '# ifdef's является швом времени ссылки. У вас есть .cpp, который вы компилируете и ссылаетесь на Windows, и другой, который вы компилируете и ссылаетесь на Linux, например. – Simple
Если различия вписываются в четко определенные области, вы можете рассмотреть возможность определения интерфейса и использования классов, чтобы скрыть детали реализации - это немного похоже на драйверы, но концепция может применяться более широко. – user2867342
Вы думали о перемещении всего распространенного кода в статическую библиотеку. И ваши приложения будут вызывать функции/создавать объекты с параметрами, которые делают разницу. – johngull