Создать общую оболочку интерфейса для двух сторонних классов - PullRequest
0 голосов
/ 03 июля 2018

Я хотел бы создать общий класс-оболочку из двух классов из сторонней библиотеки. Два класса 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...