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í.