大龙的博客

常用链接

统计

最新评论

stl中的仿函数对象-------利用了重载的(),调用时 对象()

模板:
template <class T>
class ParamCompare
{
public:
    ParamCompare(const std::string& strName) : fname(strName)
    {
    }

    bool operator()(T& ent)
    {
        return (fname.compare(ent.m_strName) == 0);
    }

private:
    std::string fname;
};


调用时:
        std::list<CSessionEnt>::iterator iter;
        iter = std::find_if(m_sessions.begin(), m_sessions.end(), ParamCompare<CSessionEnt>(strName));

解答 :   传入std::find_if(m_sessions.begin(), m_sessions.end(), ParamCompare<CSessionEnt>(strName));中的参数首先生成一个仿函数对象,在find_if的算法中比较对象的时候再调用仿函数重载的operator()函数,
在find_if的源码中:

[code]
template <class InputIterator, class Predicate>
InputIterator find_if(InputIterator first, InputIterator last,
                      Predicate pred) {
  while (first != last && !pred(*first)) ++first;
  return first;
}
[/code]
pred就是你传入find_if生成的仿函数对象,而pred(*first)就是调用的这个仿函数重载的operator()函数.

posted on 2006-12-19 16:28 大龙 阅读(685) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理