替换库中的特定类
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系统创建共享库所需的步骤。
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 如何用转义符替换字符串中的所有特殊字符
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 在一个读写器队列中,我可以用volatile替换原子吗
- 用符号版本替换对函数的所有调用
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 替换基于地图的所有引用
- 按平均值替换数组中的元素
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 初始化 std::vector 替换为单大括号而不是双大括号
- 删除/替换C++字符串中的多字符 (ÿû)
- 将 malloc 替换为数组
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 如何在C++中用'\'替换''来处理转义序列?
- 替换密码:哪一个?
- 替换 C++17 中移除的绑定 1st
- 将 Boost MPL 容器替换为 C++17 功能
- C++:如何用单个命令替换复杂的迭代?
- C++ 替换字节数组中项的顺序