泛型编程0

 

最近写算法,习惯上了泛型编程,一敲键盘,就会不由自主的打出一个template出来。比如前一阵子的通配符搜索库的模块,以及刚刚完成的通用集合运算。

通用集合运算的主要功能是:

输入: 集合列表, 集合列表索引的并、交、差运算信息串

输出: 集合列表在该信息串的运算下所得结果集合

 

比如:

              SetList = <Set0, Set1, …, Set4>

              SetOpList = “(0+2)*((1-3)+4)”

则可以计算出一个Set出来,为(Set0Set2)((Set1Set3)Set4)的结果。

用函数对象来做的话,就成了

 

template<typename TSet, typename TOpElem>

class CSetLogicop

{

public:

     //

     int operator ()(); //TSets list and TOpElems string info,also result

}

 

这样任意的集合以及信息串的形式都可以利用该算法了,但因为是参数形式,TSet的并、交、差等集合运算怎么办呢?信息串表位置的子串如何向整数索引转化呢?

一个念头一闪而过,加上两个接口来定义这些所需要的操作,不就一切ok了?比如:

 

template<typename TSet>

class ISetOp

{

public:

          // pResult[out] = pSet1[in] pSet2[in]

          virtual int Union (TSet* pSet1, TSet* pSet2, TSet* pResult) = 0;

          // pResult[out] = pSet1[in] pSet2[in]

          virtual int Intersection(TSet* pSet1, TSet* pSet2, TSet* pResult) = 0;

          // pResult[out] = pMinuendSet[in] pSet[in]

     virtual int Minus(TSet* pMinuendSet, TSet* pSet, TSet* pResult) = 0;

     //

}

 

    这样就成了真正的通用算法了,想做什么样的集合运算,只要把这个元操作的接口实现,然后初始化到CSetLogicop中,就可以使用这个模版函数对象了。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值