替换库中的特定类

时间:2012-03-26 22:09:43

标签: c++ version-control

我有一个库,它有一个基本类,被特定的库(比如library_1)广泛使用。

namespace library_1 {
    class some_class {
    }
}

我希望这个库使用我定义的这个类的另一个版本。

namespace my_own {
    class some_class {
    }
}

my_own :: some_class和library_1 :: some_class将具有相同的公共接口(但是不同的数据成员因此它们不完全是动态可转换的)。所以我希望能够编译这个库来替换这一个类。这是可行的。

然而,整个过程的复杂性在于我有第二个库(我无法访问它的源代码,称之为库_2),它使用了第一个库(包括访问some_class)。

我的主要可执行文件需要访问library_2(针对原始库编译)和不同版本的library_1,并替换了some_class。

我知道这是一个复杂的情况,但实现这一目标的最佳方式是什么(从代码角度以及如何在版本控制中维护它)?

1 个答案:

答案 0 :(得分:0)

您可以做的只是公开您需要使用替换类的部分的API,并将相应的部分编译成动态链接的库,静态地解析您正在干预的库的所有符号。显然,插入物体不得逃离这个界面。有了这个,你的程序可以有效地使用同一个库的两个冲突实现,尽管它们不能共享对象。从本质上讲,这是COM公开其接口的方式,但这种技术适用于Windows以外的其他平台,尽管我不会想到为UNIX系统创建共享库所需的步骤。