2012-03-26 13 views
0

私は、特定のライブラリ(例えばlibrary_1)によって広範囲にわたって使用される基本クラスを持つライブラリを持っています。特定のクラスをライブラリから置き換えること

namespace library_1 { 
    class some_class { 
    } 
} 

私が定義しているこのクラスの別のバージョンを代わりに使用したいと思っています。 (彼らは正確にキャスト可能ダイナミックではありませんので、異なるデータメンバ)

namespace my_own { 
    class some_class { 
    } 
} 

my_own :: some_classとlibrary_1 :: some_classは同じパブリックインターフェイスを持ってしようとしています。だから私は、この1つのクラスだけを置き換えるこのライブラリをコンパイルできるようにしたい。これは可能です。

しかし、このプロセス全体の複雑さは、(some_classへのアクセスを含む)最初のライブラリを使用する2番目のライブラリ(そのソースコードにはアクセスできず、それをlibrary_2と呼びます)があることです。

主な実行ファイルは、library_2(元のライブラリに対してコンパイルされたもの)と、このsome_classを置き換えた別のバージョンのlibrary_1の両方にアクセスする必要があります。

これは複雑な状況ですが、これを達成するための最良の方法は何か(コードの観点から、これをバージョン管理でどのように維持するか)について教えてください。

答えて

0

置き換えクラスを使用する必要がある部分のAPIだけを公開し、対応する部分を動的にリンクされたライブラリにコンパイルして、干渉しているライブラリにすべてのシンボルを静的に解決することです。明らかに、オブジェクトに干渉しても、このインタフェースを逃れることはできません。これにより、同じライブラリの2つの競合する実装を効果的に使用できますが、共有オブジェクトは使用できません。基本的に、これはCOMがそのインタフェースをどのように公開するかですが、この手法はWindows以外のプラットフォームでも機能しますが、UNIXシステムでこれを行う共有ライブラリを作成する際に必要な手順を考え出すことはできません。

関連する問題