更改现有API功能的最佳实践

时间:2014-08-08 23:40:52

标签: c++ api design-patterns

我想知道更改属于大型库项目的现有代码功能的最佳方法。我们有一个简单的例子:

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。

有没有办法在不触及原始代码的情况下这样做? (想要在更新的情况下保持简单)

提前致谢!

1 个答案:

答案 0 :(得分:0)

从您提供的代码中我可以说,API并未设计为可扩展。

如果e_comp的getter不是私有的,您可以尝试扩展A并覆盖e_comp的getter。如果没有,您无法以任何方式更改它,可以称为良好设计设计模式

可能仍然存在一些棘手的c ++黑客攻击,无论如何都要执行archive::compressor::rar