模板:
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()函数.