为接口写一个 template 适配类

为接口写一个 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;
};   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

acloud_csu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值