Funkcja obiektów
A obiekt funkcji, lub funktor, to dowolny typ, który implementuje operator().Ten operator jest określone jako wywołać operatora lub czasem wniosek importera.Standardowa biblioteka szablonu używa funkcji obiektów przede wszystkim jako kryteria dla kontenerów i algorytmy sortowania.
Funkcja obiekty dostarczają dwa główne zalety wywoływanej funkcji proste.Pierwsza jest, że obiekt funkcji może zawierać Państwa.Druga jest, że obiekt funkcji jest typem i może być używany jako parametr szablonu.
Tworzenie obiektu funkcji
Aby utworzyć obiekt funkcji, utworzyć typ i wprowadzenia w życie operator(), takie 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 z main funkcji pokazuje, w jaki sposób wywołania obiektu funkcji.To wywołanie wygląda jak wywołanie funkcji, ale faktycznie wywołuje operator() typu teoria.Podobieństwo wywołanie obiektu funkcji i funkcji jest, jak obiekt funkcji termin dostarczone.
Funkcja obiektów i kontenerów
Standardowa biblioteka szablon zawiera kilka obiektów funkcji w <functional> nagłówka pliku.Jednym z zastosowań 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 szablonu jest obiekt funkcji less.Ten obiekt funkcja zwraca true , jeśli pierwszy parametr przekazywany do jest mniejsza niż drugi parametr przekazywany.Ponieważ niektóre kontenery sortowanie ich elementów, kontener musi w jakiś sposób porównywania dwóch elementów i można to osiągnąć, za pomocą funkcji obiektu.Można zdefiniować własne sortowanie kryteria dla kontenerów, tworzenie obiektu funkcji i określając ją na liście szablonów dla kontenera.
Obiekty funkcji i algorytmów
Innym zastosowaniem 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 remove_if jest obiekt funkcji, która zwraca wartość logiczną ( predykatu).Jeśli wynik funkcji obiekt jest true, a następnie element jest usuwany z kontenera, uzyskiwany przez Iteratory _First i _Last.Można użyć dowolnej funkcji obiekty zadeklarowane w <functional> nagłówka dla argumentu _Pred lub tworzyć własne.