您的位置:首页 > 其它

写得用于比较的函数对象模板

2012-08-17 13:39 316 查看
#include "bdc_share_ptr.hpp"

template <typename IDTYPE, typename ITEMTYPE, typename GETIDFUN>

class ItemCompareById

{

typedef boost::shared_ptr<ITEMTYPE> p_ITEMTYPE_T;

public:

explicit ItemCompareById(IDTYPE id, GETIDFUN dun);

ItemCompareById(const ItemCompareById &compare);

bool operator()(p_ITEMTYPE_T &p_obj) ;

bool operator()(ITEMTYPE *p_obj) ;

bool operator()(ITEMTYPE &p_obj) ;

private:

ItemCompareById &operator = (const ItemCompareById &compare);

IDTYPE id_;

GETIDFUN fun_;

};

template <typename IDTYPE, typename ITEMTYPE, typename GETIDFUN>

ItemCompareById<IDTYPE, ITEMTYPE, GETIDFUN>::ItemCompareById(IDTYPE id, GETIDFUN fun)

: id_(id), fun_(fun)

{

}

template<typename IDTYPE, typename ITEMTYPE, typename GETIDFUN>

ItemCompareById<IDTYPE, ITEMTYPE, GETIDFUN>::ItemCompareById(const ItemCompareById &compare)

: id_(compare.id_), fun_(compare.fun_)

{

}

template <typename IDTYPE, typename ITEMTYPE, typename GETIDFUN>

bool ItemCompareById<IDTYPE, ITEMTYPE, GETIDFUN>::operator()(ITEMTYPE &obj)

{

return (obj.*fun_)() == id_;

}

template <typename IDTYPE, typename ITEMTYPE, typename GETIDFUN>

bool ItemCompareById<IDTYPE, ITEMTYPE, GETIDFUN>::operator()(p_ITEMTYPE_T &p_obj)

{

return (p_obj != 0) && ((p_obj.get()->*fun_)() == id_);

}

template <typename IDTYPE, typename ITEMTYPE, typename GETIDFUN>

bool ItemCompareById<IDTYPE, ITEMTYPE, GETIDFUN>::operator()(ITEMTYPE *p_obj)

{

return (p_obj != 0) && ((p_obj->*fun_)() == id_);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: