Sdílet prostřednictvím


Objekty funkcí

A funkce objektu, nebo functor, libovolný typ, který implementuje operator().Tento operátor je označována jako volat operátor nebo někdy aplikace operátoru.Standardní knihovna šablon používá především jako kritéria pro kontejnery a algoritmy řazení funkce.

Objekty funkce poskytuje dvě hlavní výhody oproti volání funkce rovné.První je, že funkce objektu může obsahovat státu.Druhým je, že funkce objektu je typ a proto ji lze použít jako parametr šablony.

Vytváření funkce objektu

Chcete-li vytvořit objekt funkce, vytvořit typ a implementovat operator(), jako například:

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);
}

Poslední řádek main funkce ukazuje, jak volat funkce objektu.Toto volání vypadá volání funkce, ale ve skutečnosti volá operator() Functor typu.Této podobnosti mezi volání funkce objektu a funkce je jak pojem funkce objektu byl dodán.

Funkce objekty a kontejnery

Standardní knihovna šablon obsahuje několik funkcí objektů v <functional> soubor hlaviček.Jeden tyto objekty funkce slouží jako kritérium třídění pro kontejnery.Například set kontejneru je deklarována takto:

template <
    class Key,
    class Traits=less<Key>,
    class Allocator=allocator<Key> >
class set

Druhý argument šablony je objekt funkce less.Vrátí objekt funkce true Pokud předána první parametr je menší než druhý parametr předaný.Vzhledem k tomu, že některé kontejnery řadit jejich elementy, kontejner musí být porovnávání dvou prvků a to lze provést pomocí funkce objektu.Můžete definovat vlastní kritéria pro kontejnery řazení vytvořením funkce objektu a určení v seznamu šablon pro kontejner.

Objekty funkce a algoritmy

Jiné funkční objekty slouží v algoritmech.Například remove_if algoritmus je deklarována takto:

template<class ForwardIterator, class Predicate>
    ForwardIterator remove_if(
        ForwardIterator _First,
        ForwardIterator _Last,
        Predicate _Pred
    );

Poslední argument remove_if je funkce objektu, který vrací hodnotu typu boolean ( predikát).Jestliže je výsledek funkce objektu true, pak prvek je odebrán z kontejneru, který přistupuje iterátorů _First a _Last.Můžete použít kterýkoli z funkce objekty deklarované v <functional> záhlaví pro tento argument _Pred nebo si vytvořit své vlastní.

Viz také

Referenční dokumentace

Standardní knihovna šablon