Function objects

From cppreference.com
< cpp‎ | utility
 
 
Utilities library
Type support (basic types, RTTI, type traits)
Dynamic memory management
Error handling
Program utilities
Variadic functions
Date and time
Function objects
(C++11)
Relational operators
optional, any and variant (C++17)
Pairs and tuples
(C++11)
(C++17)
Swap, forward and move
(C++14)
(C++11)
(C++11)
Elementary string conversions
(C++17)
(C++17)
Type operations
(C++11)
(C++17)
 
Function objects


Function wrappers
(C++11)
(C++11)
(C++17)
Bind
(C++11)
Reference wrappers
(C++11)(C++11)
Operator wrappers
Negators
(deprecated)
(deprecated)

(deprecated)
(deprecated)
Searchers
Old binders and adaptors
(until C++17)
(until C++17)
(until C++17)
(until C++17)
(until C++17)(until C++17)(until C++17)(until C++17)
(until C++17)(until C++17)
(until C++17)(until C++17)

(until C++17)
(until C++17)(until C++17)(until C++17)(until C++17)
 

A function object is any object for which the function call operator is defined. C++ provides many built-in function objects as well as support for creation and manipulation of new function objects.

Polymorphic function wrappers

std::function provides support for storing arbitrary function objects.

(C++11)
wraps callable object of any type with specified function call signature
(class template)
(C++11)
creates a function object out of a pointer to a member
(function template)
the exception thrown when invoking an empty std::function
(class)
(C++17)
invokes any Callable object with given arguments
(function template)

Bind

std::bind provides support for partial function application, i.e. binding arguments to functions to produce new functions.

(C++11)
binds one or more arguments to a function object
(function template)
indicates that an object is std::bind expression or can be used as one
(class template)
indicates that an object is a standard placeholder or can be used as one
(class template)
Defined in namespace std::placeholders
placeholders for the unbound arguments in a std::bind expression
(constant)

Negators

std::not_fn creates a function object that negates the result of the callable object passed to it.

(C++17)
Creates a function object that returns the complement of the result of the function object it holds
(function template)
(deprecated)
wrapper function object returning the complement of the unary predicate it holds
(class template)
(deprecated)
wrapper function object returning the complement of the binary predicate it holds
(class template)
(deprecated)
constructs custom std::unary_negate object
(function template)
(deprecated)
constructs custom std::binary_negate object
(function template)

Searchers

Searchers implementing several string searching algorithms are provided and can be used either directly or with std::search.

standard C++ library search algorithm implementation
(class template)
Boyer-Moore search algorithm implementation
(class template)
Boyer-Moore-Horspool search algorithm implementation
(class template)

Reference wrappers

Reference wrappers allow reference arguments to be stored in copyable function objects:

CopyConstructible and CopyAssignable reference wrapper
(class template)
(C++11)(C++11)
creates a std::reference_wrapper with a type deduced from its argument
(function template)

Operator function objects

C++ defines several function objects that represent common arithmetic and logical operations:

Arithmetic operations
function object implementing x + y
(class template)
function object implementing x - y
(class template)
function object implementing x * y
(class template)
function object implementing x / y
(class template)
function object implementing x % y
(class template)
function object implementing -x
(class template)
Comparisons
function object implementing x == y
(class template)
function object implementing x != y
(class template)
function object implementing x > y
(class template)
function object implementing x < y
(class template)
function object implementing x >= y
(class template)
function object implementing x <= y
(class template)
Logical operations
function object implementing x && y
(class template)
function object implementing x || y
(class template)
function object implementing !x
(class template)
Bitwise operations
function object implementing x & y
(class template)
function object implementing x | y
(class template)
function object implementing x ^ y
(class template)
(C++14)
function object implementing ~x
(class template)

Old binders and adaptors

Several utilities that provided early functional support are deprecated in C++11 and removed in C++17:

Base
(until C++17)
adaptor-compatible unary function base class
(class template)
(until C++17)
adaptor-compatible binary function base class
(class template)
Binders
(until C++17)(until C++17)
function object holding a binary function and one of its arguments
(class template)
(until C++17)(until C++17)
binds one argument to a binary function
(function template)
Function adaptors
adaptor-compatible wrapper for a pointer to unary function
(class template)
adaptor-compatible wrapper for a pointer to binary function
(class template)
(until C++17)
creates an adaptor-compatible function object wrapper from a pointer to function
(function template)
(until C++17)(until C++17)(until C++17)(until C++17)
wrapper for a pointer to nullary or unary member function, callable with a pointer to object
(class template)
(until C++17)
creates a wrapper from a pointer to member function, callable with a pointer to object
(function template)
(until C++17)(until C++17)(until C++17)(until C++17)
wrapper for a pointer to nullary or unary member function, callable with a reference to object
(class template)
(until C++17)
creates a wrapper from a pointer to member function, callable with a reference to object
(function template)