Я пытаюсь написать предикатную функцию для использования с алгоритмами 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);
У меня больше пользы для второго типа, поскольку я обычно хотел бы создать предикатный объект с некоторыми членами в нем и использовать их в алгоритме. Когда я добавляю ту же самую функцию isEven внутри checker и использую ее как предикат, я получаю сообщение об ошибке:
3. Синтаксис, который дает ошибку:
class checker {
public:
bool isEven(unsigned int i)
{ return (i%2 == 0); }
};
checker c;
std::find_if(itBegin, itEnd, c.isEven);
Вызов c.isEven дает ошибку во время компиляции, говоря undefined ссылку на некоторую функцию. Может кто-нибудь объяснить, почему 3. дает ошибку? Кроме того, я был бы признателен за любые указатели на чтение об основах предиката и итератора.