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