Наша кодовая база содержит тысячи строк и устаревший код. Со временем разные разработчики закодировали в соответствии с их пригодностью и стандартами. Один из неправильно реализованных кодов состоит в том, что включается общий заголовок, который объявляется и определяется в разных каталогах для различий между различными двоичными файлами с небольшой разницей. Пример:
dir1 / xxx.h
class ABC{
public:
int init();
};
dir1 / xxx.cpp
ABC::init()
Аналогично
У dir2 есть собственная копия.
Проблема заключалась в том, что разработчики хотели сохранить разные версии - первичные, потому что они должны знать, когда нужно вызывать исходный код в dir1 или dir2, который не зависит от модификаций для каждой.
Теперь наша проблема в том, как мы связываем код в нашем двоичном файле. Соответствующий заголовочный файл условно компилируется с использованием той же директивы включения #ifndef .. #define .. #endif. Заголовочные файлы архивируются в lib1.a lib2.a и так далее. Следовательно, когда мы связываем нашу библиотеку и, в случае необходимости, мы запрашиваем ее из lib3.a во время компоновки, мы должны убедиться, что она связывает первую:
ldd .. lib1.a lib2.a lib3.a
- поэтому точный заголовок не связывается должным образом. Обратите внимание, что все .a имеют некоторые дополнительные интерфейсы, скомпилированные и связанные.
К сожалению, требуемый заголовок содержит общее объявление (определяет те же методы, но немного отличаются)
Как мы можем решить проблему? Включение Namespace будет значить много изменений в нашей кодовой базе? Есть ли лучший способ сделать это?
Какой дизайн лучше всего подойдет для такой базы кода, чтобы впоследствии ни один разработчик не смог случайно включить эти фатальные сигнатуры?
Пожалуйста, помогите