Function Objects
Utilities
Collaboration diagram for Function Objects:

## Modules

| Adaptors for pointers to functions
| Adaptors for pointers to members
| Arithmetic Function Object Classes
| Binder Classes
| Boolean Operations Classes
| Comparison Classes
| Hashes
| Negators

## Classes

struct | std::binary_function< _Arg1, _Arg2, _Result >
class | std::function< _Res(_ArgTypes...)>
class | std::reference_wrapper< _Tp >
struct | std::unary_function< _Arg, _Result >

## Functions

template<typename _Tp , typename _Class >
constexpr _Mem_fn< _Tp _Class::* > | std::mem_fn (_Tp _Class::*__pm) noexcept

## Detailed Description

Function objects, or functors, are objects with an `operator()` defined and accessible. They can be passed as arguments to algorithm templates and used in place of a function pointer. Not only is the resulting expressiveness of the library increased, but the generated code can be more efficient than what you might write by hand. When we refer to functors, then, generally we include function pointers in the description as well.

Often, functors are only created as temporaries passed to algorithm calls, rather than being created as named variables.

Two examples taken from the standard itself follow. To perform a by-element addition of two vectors `a` and `b` containing `double`, and put the result in `a`, use

transform (a.begin(), a.end(), b.begin(), a.begin(), plus<double>());

To negate every element in `a`, use

transform(a.begin(), a.end(), a.begin(), negate<double>());

The addition and negation functions will usually be inlined directly.

An adaptable function object is one which provides nested typedefs `result_type` and either `argument_type` (for a unary function) or `first_argument_type` and `second_argument_type` (for a binary function). Those typedefs are used by function object adaptors such as `bind2nd`. The standard library provides two class templates, `unary_function` and `binary_function`, which define those typedefs and so can be used as base classes of adaptable function objects.

Since C++11 the use of function object adaptors has been superseded by more powerful tools such as lambda expressions, `function<>`, and more powerful type deduction (using `auto` and `decltype`). The helpers for defining adaptable function objects are deprecated since C++11, and no longer part of the standard library since C++17. However, they are still defined and used by libstdc++ after C++17, as a conforming extension.

## Function Documentation

## mem_fn()

template<typename _Tp , typename _Class >

constexpr _Mem_fn< _Tp _Class::* > std::mem_fn | ( | _Tp _Class::* | __pm | ) |

inline constexpr noexcept

Returns a function object that forwards to the member pointer pm.

Definition at line 179 of file functional.