替换库中的特定类

Replacing a specific class from a library

本文关键字:替换      更新时间:2023-10-16

我有一个库,它有一个基本类,该类被所讨论的特定库(比如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(根据原始库编译)和替换了这个some_class的library_1的不同版本。

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

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