代码之家  ›  专栏  ›  技术社区  ›  Danny

为两个第三方类创建公共接口包装器

  •  0
  • Danny  · 技术社区  · 6 年前

    我想围绕第三方库中的两个类创建一个公共包装类。这两个API类有99%的方法相同,但有一些方法的签名略有不同。

    我研究过代理、网桥、适配器和CRTP,但似乎没有什么能完全满足我的要求。

    这是一个粗略的例子,我正在尝试做什么。欢迎提出任何建议。

    #include <stdio.h>
    
    class APIClass1 /* cannot modify */
    {
    public:
        void one() { printf("APIClass1 ONE\n"); }
        void two() { printf("APIClass1 TWO\n"); }
    };
    
    class APIClass2 /* cannot modify */
    {
    public:
        void one()      { printf("APIClass2 ONE\n"); }
        void two(int n) { printf("APIClass2 TWO: %d\n", n); }
    };
    
    class MasterClassBC
    {
    public:
        virtual ~MasterClassBC() {};
        virtual void one() = 0;
        virtual void two() = 0;
        virtual void two(int n) = 0;
    };
    
    template <class T>
    class MasterClass : public T, public MasterClassBC
    {
    public:
        typedef T TBase;
    
        void one() { TBase::one(); }
        void two() { TBase::two(); }
    
        void two(int n) { TBase::two(n); }
    
    };
    
    int main(int argc, char *argv[])
    {
        MasterClassBC *pBc = new MasterClass<APIClass1>;
    
        pBc->one();
        pBc->two();
    
        delete pBc;
    
        pBc = new MasterClass<APIClass2>;
    
        pBc->one();
        pBc->two(11);
    }
    
    0 回复  |  直到 6 年前