stl中的仿函數(shù)對象-------利用了重載的(),調(diào)用時 對象()
模板: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;
};
調(diào)用時:
? ? ? ? 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));中的參數(shù)首先生成一個仿函數(shù)對象,在find_if的算法中比較對象的時候再調(diào)用仿函數(shù)重載的operator()函數(shù),
在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生成的仿函數(shù)對象,而pred(*first)就是調(diào)用的這個仿函數(shù)重載的operator()函數(shù).