Правильный способ определения функции предиката в C ++

Я пытаюсь написать функцию предиката для использования с алгоритмами STL. Я вижу, что есть два способа определить предикат:

(1) Используйте простую функцию, как показано ниже:

bool isEven(unsigned int i)   
{ return (i%2 == 0); }

std::find_if(itBegin, itEnd, isEven); 

(2) Используйте функцию operator (), как показано ниже:

class checker {  
public:  
  bool operator()(unsigned int i)  
  { return (i%2 == 0); }  
}; 

std::find_if(itBegin, itEnd, checker); 

Мне больше нравится второй type, поскольку я обычно хотел бы создать объект-предикат с некоторыми членами в нем и использовать их в алгоритме. Когда я добавляю ту же функцию isEven в средство проверки и использую ее в качестве предиката, я получаю сообщение об ошибке:
3. Синтаксис, который выдает ошибку:

class checker { 
    public: 
       bool isEven(unsigned int i) 
       { return (i%2 == 0); }
}; 

checker c; 
std::find_if(itBegin, itEnd, c.isEven); 

Вызов c.isEven дает ошибку во время компиляции, говоря неопределенную ссылку на некоторую функцию. Может кто-нибудь объяснить, почему 3. выдает ошибку? Кроме того, я был бы признателен за любые указатели, чтобы прочитать об основах предикатов и итераторов.

22
задан Lightness Races with Monica 15 March 2012 в 23:56
поделиться