仿函数类:合理处理大对象和多态

仿函数类的设计原则:数据量小,单态


 // 用于修改的BPFC的新实现类

template<typename T>                                   
class BPFCImpl :  public unary_function<T, void> {               
private:

// 以前在BPFC里的所有数据现在在这里
        Widget w;                                       
        int x;                                         
        ...

 // 多态类需要虚析构函数
        virtual ~BPFCImpl();                                                                            
        virtual void operator()(const T& val) const;

 // 让BPFC可以访问这些数据
        friend class BPFC<T>;                          
};


// 小的,单态版的BPFC
template<typename T>
class BPFC  :  public unary_function<T, void> {
private:

// 这是BPFC唯一的数据
        BPFCImpl<T> *pImpl;    

public:

// 现在非虚;调用BPFCImpl的
        void operator()(const T& val) const {                                            
                pImpl->operator() (val);
        }
        ...
};


BPFC::operator()的实现例证了BPFC所有的虚函数是怎么实现的:它们调用了在BPFCImpl中它们真的虚函数。结果是仿函数类(BPFC)是小而单态的,但可以访问大量状态而且行为多态。


1、这个例子体现了Pimpl惯用法

2、必须保证BPFC的拷贝构造函数对指向的BPFCImpl对象做了合理的事情。也许最简单的合理的东西是引用计数,使用类似Boost的shared_ptr,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值