2012-03-26 61 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系统上执行此操作。