Obiekty funkcji
A obiekt funkcji, lub functor, jest dowolnego typu, który implementuje operator().Ten operator jest określany jako wywołać operatora lub czasem aplikacji operatora.Standardowa biblioteka szablonów używa funkcji obiektów przede wszystkim jako kryteria dla kontenerów i algorytmów sortowania.
Funkcja obiekty dostarczają dwie podstawowe zalety wywoływanej funkcji proste.Pierwszy to, że obiekt funkcji może zawierać Państwa.Drugi to, że obiekt funkcji jest typem i dlatego mogą być używane jako parametr szablonu.
Tworzenie obiektu funkcji
Aby utworzyć obiekt funkcji, utworzyć typ i zaimplementować operator(), takich jak:
class Functor
{
public:
int operator()(int a, int b)
{
return a < b;
}
};
int main()
{
Functor f;
int a = 5;
int b = 7;
int ans = f(a, b);
}
Ostatni wiersz main funkcja pokazuje, jak wywołać obiekt funkcji.To wywołanie wygląda jak wywołanie funkcji, ale faktycznie dzwoni operator() typu teoria.Ten podobieństwa między wywołaniem obiekt funkcji i funkcji jest, jak obiekt funkcji termin doszło.
Funkcja obiektów i kontenerów
Standardowa biblioteka szablonów zawiera kilka funkcji obiektów w <functional> pliku nagłówka.Użyj jednego z tych obiektów funkcji jest jako kryterium sortowania dla pojemników.Na przykład set kontenera jest zadeklarowany w następujący sposób:
template <
class Key,
class Traits=less<Key>,
class Allocator=allocator<Key> >
class set
Drugi argument szablon jest obiekt funkcji less.Ten obiekt funkcja zwraca true pierwszy parametr przekazany do jest niższa niż drugi parametr przekazany.Ponieważ niektóre pojemniki sortowania ich elementy, kontener musi w jakiś sposób porównywania dwóch elementów, a to osiągnąć za pomocą funkcji obiektu.Można zdefiniować własne kryteria dla pojemników sortowania tworzenia obiektu funkcji i określając go na liście szablonów dla kontenera.
Funkcje jako obiekty i algorytmy
Użyj innego funkcjonalności obiektów jest w algorytmach.Na przykład remove_if algorytm jest zadeklarowany w następujący sposób:
template<class ForwardIterator, class Predicate>
ForwardIterator remove_if(
ForwardIterator _First,
ForwardIterator _Last,
Predicate _Pred
);
Ostatni argument do remove_if jest obiekt funkcji, która zwraca wartość logiczną ( predykat).Jeżeli wynik obiekt funkcji jest true, a następnie element jest usuwany z kontenera uzyskiwany za pomocą Iteratory _First i _Last.Można użyć dowolnego z obiektów funkcję zadeklarowane w <functional> nagłówka dla argumentu _Pred lub tworzyć własne.