我想围绕第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);
}