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