泛型仿函数一

泛型仿函数
函数和泛仿函数之间的本质区别在于后者可以存储状态,并可以调用成员函数
特点1.可封装任何处理请求 2.具备型别安全性 3.是一种带有"value语义"的对象


Command设计模式
Command将请求封装与对象之内,“和实际执行者分开存储的工作” 从而降低系统中两个部分之间的依存性
1、应用程序产生一个concreteCommand对象
2、concreteCommand 中的Command接口传给invoker
3、一旦执行时机到了,Command的Execute()虚函数,虚拟调用机制会将这个调用动作发送给ConcreteCommand对象,由后者处理细节,ConcreteCommand找到Receiver对象,并通过该对象实际进行处理。另一种情况是由ConcreteCommand对象全权处理


Command 
特性:接口分离:invoker和receiver分离
 时间分离:Command保存了一个整装待发的处理请求,供将来运用
环境依赖同样重要


泛化角度分为
主动和被动式两类
Command 运用于UI 提供类似插槽功能


转发命令实际是一个超强的callback,一个泛华的callback,所谓的callback是一个指针


泛型解决问题一
一个转发式Functor不但会委托可调用体,它本身也是一个可调用提,这就造成一个functor能够拥有其他Functor,所以需要返回值泛型化,参数泛型化与参数个数泛型化
template <typename ResultType,class TList>
class Functor
{
...
}
Functor<double,TYPELIST_2(int,double)>myFunctor;


实作
参数个数还是需要辛苦
template<typename R>
class FunctorImpl<R,NullType>
{
public:
virtual R operator{}=0;
virtual FunctorImp* Clone()const =0;
virtual ~FunctorImpl(){};
};
template<typename R,typename P1>
class FunctorImpl<R,TYPELIST_1(P1)>
{
public:
virtual R operator()(P1)=0;
virtual FunctorImp1* Clone()const =0;
virtual ~FuncorImp1(){}
}
template<typename R,typename P1,typename P2>
class FunctorImpl<R,TYPELIST_2(P1,P2)>
{
public:
virtual R operatir(){P1,P2} =0;
virtual FunctorImpl* Clone() const =0;
virtual ~FunctorImpl(){}
};
template<typename R,class TList>
class Functor
{
public:
Functor();
Functor{const Functor&}
Functor& operator={const Functor&};
explict Functor{std::auto_ptr<Impl>spImpl};
...
private:
typedef FunctorImpl<R,TList>Impl;
std::auto_ptr<Impl>spImpl_;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值