2013-06-04 4 views
2

Для чего предназначен этот класс?
Что такое использование этого класса?

class EqualTo { 
private: 
    int target; 
public: 
    EqualTo(int i) : target(i) {} 
    bool operator()(const int& i) const { 
    return i == target; 
    } 
};    

У меня есть этот класс в выполнении домашних заданий, и они использовали его с функцией find так же, как:

it = list.find(EqualTo(3)); 

благодаря

+6

Это функтор, который реализует логический предикат –

+2

Пожалуйста, скажите мне, что они не учат этому материалу ... – crush

+2

@crush, почему бы и нет ? (за исключением 'i', возможно, должны быть переданы по значению, а не константной ссылке, но все же) –

ответ

7

Это функтор; то есть объект, который можно назвать функцией. Он более гибкий, чем функция, поскольку он также может содержать состояние и использовать его при его вызове. Вот пример того, как использовать его непосредственно:

EqualTo is5(5); // Object to test whether numbers are 5 

assert(is5(5)); // Returns true: value is 5 
assert(!is5(42)); // Returns false: value is not 5 

В этом случае он принимает одно значение и возвращает логическое значение, чтобы сказать вам, удовлетворяет ли это значение некоторого условия; функтор, который делает это известным как предикат .

it = list.find(EqualTo(3)); 

В этом примере используется предикат, чтобы найти элемент в контейнере, который соответствует условию. В этом случае он дает вам итератор, указывающий на первый элемент, который равен 3.

+0

Не будет 'assert (! Is5 (42)); // False: не 5' На самом деле утверждать true, так как 'is5 (42) вернет false'? – crush

+1

@crush: Да, вот что я имел в виду. Функтор возвращает 'false', поэтому утверждение преуспевает. Я немного уточнил комментарии. –

+0

О, ладно. Виноват. – crush

Смежные вопросы