Я пытаюсь написать функцию предиката для использования с алгоритмами 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. выдает ошибку? Кроме того, я был бы признателен за любые указатели, чтобы прочитать об основах предикатов и итераторов.