为两个第三方类创建通用的接口包装

时间:2018-07-03 01:11:30

标签: c++ polymorphism

我想围绕第3方库的两个类创建一个通用包装类。这两个API类具有99%的相同方法,但有些具有稍微不同的签名。

我已经研究了代理,网桥,适配器和CRTP,但似乎什么也做不了我想要的。

如果我拥有API类,那么我会让它们从通用基类继承(并在整个应用程序中使用基类指针),但是API是封闭的二进制文件。

这是我正在尝试做的一个粗略示例。欢迎任何建议。

#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 个答案:

没有答案