我們的代碼庫有數千行代碼和遺留代碼。隨着時間的推移,不同的開發者會根據其適用性和標準進行編碼。其中一個錯誤實現的代碼是包含一個通用頭文件,在不同的目錄中聲明和定義,以排列在不同的二進制文件中,幾乎沒有區別。例如:鏈接問題雖然構建不同的二進制文件
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都有一些編譯和鏈接的其他接口。
其不幸的是,所要求的報頭包含共同聲明(定義相同的方法,但不同的一點)
我們怎樣才能解決這個問題?包括命名空間在我們的代碼庫中意味着很多改進?有沒有更好的方法來做到這一點?
什麼是最好的設計,這樣的代碼庫 - 以至於後來開始沒有開發人員可以無意中包括這些致命的簽名?
請幫