本文共 970 字,大约阅读时间需要 3 分钟。
为接口写一个 template 适配类
黄国强 2010-10-21 先看一下三个类的定义。 // 一个接口 class ICallBack { public: virtual ~ICallBack(void){} // 此处是回调 virtual void CallBack(void) = 0; }; // 内部类 class CSomeObj { public: CSomeObj(void); ~CSomeObj(void); void Func(ICallBack * p); }; // 对外的输出类 class CExportObj { public: CExportObj(void); ~CExportObj(void); void Func(ICallBack * pT); private: CSomeObj m_SomeObj; }; 显然,调用Func必须传入一个从ICallBack继承的对象,但是由于很多原因,我们无法这样做,那么就可以用template 适配类来解决这个问题。 // CExportObj 为对外的输出类 class CExportObj { public: CExportObj(void); ~CExportObj(void); void Func(ICallBack * pT); // 下面增加了一个模板方法 template<class T> void Func(T * pT) // 在这里无需调用者必须从 ICallBack 继承 { TCallBackAdapter<T> tmp(pT); m_SomeObj.Func(&tmp); // 这里传入的是 template 适配类 } private: CSomeObj m_SomeObj; }; 下面是template 适配类的定义 // template 适配类 template <class T> class TCallBackAdapter : public ICallBack { public: TCallBackAdapter(T * pT):m_pT(pT){} virtual void CallBack(void) { m_pT->CallBack(); } private: T * m_pT; };转载地址:http://dlefb.baihongyu.com/