我想围绕第三方库中的两个类创建一个公共包装类。这两个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);
}