У меня есть несколько библиотек, нацеленных на несколько платформ, некоторые из которых в реальном времени имеют / не имеют приличную поддержку STL, не говоря уже о tr1 или C ++ 11. Это означает, что все используют собственные классы библиотеки string / array / list / younameit. Теперь от этих платформ отказываются в пользу «чистого» C ++ 11 и STL (за что я очень очень рад: последняя библиотека, которую я сделал, является первой с новым стандартом, и время разработки сильно сократилось, в то время как код качество повысилось).
Теперь я хочу, чтобы новые проекты не зависели от пользовательских классов string / array / ..., и я планирую перейти к пошаговой рефактории: всякий раз, когда мне нужен какой-то класс, создайте дубликат (хорошо не полный дубликат; все же это больно, но есть ли другой вариант?), который использует вместо этого STL. В начале это может означать, что целое дерево классов может нуждаться в изменении сразу. В то же время оригинальный код должен продолжать работать в течение следующих 4 лет или около того.
Практически главный вопрос, с которым я сейчас сталкиваюсь, это: куда я могу поместить эти новые классы? Например
A\A.h depends on B\B.h and string.h
должно стать
a new A.h depending on a new B.h and <string>
Создать новый класс NewA и вставить в A.h? Или создать класс A в новом пространстве имен и сохранить его в A\newA.h
? Или я могу создать совершенно новую структуру подкаталогов, такую как new\A\A.h
и new\B\b.h
?
Я знаю, что уже есть пара похожих вопросов, с отличными ответами, но я хотел бы получить еще один практический совет, а не "читать Эффективная работа с устаревшим кодом". Хотя это, с разумной стороны, хороший ответ, меня больше интересует, что вы практически сделали в подобной ситуации?
изменить некоторые уточнения:
- Большинство текущих приложений также будут портированы для использования STL вовремя, поскольку все они будут работать на новой платформе (все еще сомневаются в RTX или InTime, но в одном из них).
- Я использую VCS, git и почти все, что имеет значение, покрыто юнит-тестами. Иначе это было бы безумием.
- Нет настоящей команды, и я сам по себе (к сожалению, я не могу считать своего коллегу членом команды, когда дело доходит до таких вещей, хотя, будучи почти в два раза старше меня, его уровень программирования меньше половины моего, и Я даже не такой опытный.