2012-03-26 62 views
0

我有一個庫,它有一個基本的類,廣泛用於特定的庫(比如library_1)。從庫中替換特定的類

namespace library_1 { 
    class some_class { 
    } 
} 

我希望這個庫可以使用我定義的這個類的另一個版本。

namespace my_own { 
    class some_class { 
    } 
} 

my_own :: some_class和library_1 :: some_class將會有相同的公共接口(但不同的數據成員,所以他們不完全動態澆注料)。所以我希望能夠編譯這個庫來替換這個類。這是可行的。然而,在這整個過程中的複雜性是,我有第二個庫(其源代碼我無法訪問,稱之爲library_2),它使用第一個庫(包括訪問some_class)。

我的主要可執行文件需要訪問library_2(它是針對原始庫編譯的)和不同版本的library_1,並替換了這個some_class。

我知道這是一個複雜的情況,但是實現這個目的的最佳方法是什麼(從代碼角度來看,以及如何在版本控制中保持這種狀態)?

回答

0

你可以做的只是暴露你需要使用你的替換類的部分的API,並將相應的部分編譯成一個動態鏈接庫,靜態地解析所有符號到你插手的庫。顯然,插入對象不能逃脫這個接口。有了這個,你的程序可以有效地使用同一個庫的兩個衝突的實現,儘管它們不能共享對象。從本質上講,這是COM如何公開其接口,但是這種技術可以在除Windows以外的其他平臺上工作,儘管我不會想出創建共享庫的必要步驟,以便在UNIX系統上執行此操作。