Sdílet prostřednictvím


Objekty funkce

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átor.Standardní šablona knihovny používá objekty funkce především jako kritéria pro kontejnery a algoritmy řazení.

Objekty funkce poskytuje dvě hlavní výhody přes volání funkce rovné.První je funkce objekt obsahovat státu.Druhý je funkce objektu je typ a proto je lze použít jako parametr šablony.

Vytváření objektu funkce

Chcete-li vytvořit objekt funkce, vytvořit typ a provádět operator(), 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 funkci objektu.Volání vypadá volání funkce, ale ve skutečnosti volá operator() typu Functor.Podobnosti volání funkce objektu a funkci je jak objekt funkce termín dokumentaci.

Funkce objekty a kontejnery

Standardní šablona knihovny obsahuje několik funkcí objekty v <functional> hlavičky souboru.Jeden objekty tyto funkce slouží jako kritérium třídění pro kontejnery.Například set kontejneru je deklarován takto:

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

Druhý argument šablona je objekt funkce less.Tento objekt funkce vrátí true v případě, že první parametr předaný je menší než druhý parametr předaný.Protože některé kontejnery seřadit jejich prvky, kontejneru 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 objektu funkce a zadání šablony seznamu kontejneru.

Objekty funkce a algoritmy

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

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

Poslední argument remove_if je funkce objekt, který vrací logickou hodnotu ( predikát).Pokud je výsledek funkce objektu true, a pak z kontejneru, přistupuje u iterátorů odebrán prvek _First a _Last.Můžete použít libovolnou funkci objekty deklarované v <functional> záhlaví argumentu _Pred nebo vytvořit vlastní.

Viz také

Referenční dokumentace

Standardní šablona knihovny