我想知道更改属于大型库项目的现有代码功能的最佳方法。我们有一个简单的例子:
Class A {
public:
A() {}
void init() {
a_comp = archive::compressor::zip;
}
private:
archive::compressor* a_comp;
};
如果现有代码没有为其提供设置器,那么将a_comp属性从archive::compressor::zip
更改为archive::compressor::rar
的最佳方法是什么?
如果我只是派生自A并覆盖init()实现,我无法确保所有api功能都使用rar而不是zip。
有没有办法在不触及原始代码的情况下这样做? (想要在更新的情况下保持简单)
提前致谢!
答案 0 :(得分:0)
从您提供的代码中我可以说,API并未设计为可扩展。
如果e_comp
的getter不是私有的,您可以尝试扩展A
并覆盖e_comp
的getter。如果没有,您无法以任何方式更改它,可以称为良好设计或设计模式。
可能仍然存在一些棘手的c ++黑客攻击,无论如何都要执行archive::compressor::rar
。