cpp / latest / named_req / functionobject.html /

C++ named requirements: FunctionObject

A FunctionObject type is the type of an object that can be used on the left of the function call operator.

Requirements

The type T satisfies FunctionObject if.

Given.

  • f, a value of type T or const T
  • args, suitable argument list, which may be empty

The following expressions must be valid:

Expression Requirements
f(args) performs a function call

Notes

Functions and references to functions are not function object types, but can be used where function object types are expected due to function-to-pointer implicit conversion.

Standard library

Example

demonstrates different types of function objects.

#include <iostream>
 
void foo(int x) { std::cout << "foo(" << x << ")\n"; }
 
int main()
{
    void(*fp)(int) = foo;
    fp(1); // calls foo using the pointer to function
 
    struct S {
        void operator()(int x) const { std::cout << "S::operator(" << x << ")\n"; }
    } s;
    s(2); // calls s.operator()
    s.operator()(3); // the same
 
    auto lam = [](int x) { std::cout << "lambda(" << x << ")\n"; };
    lam(4); // calls the lambda
    lam.operator()(5); // the same
}

Output:

foo(1)
S::operator(2)
S::operator(3)
lambda(4)
lambda(5)

See also

a type for which the invoke operation is defined
(named requirement)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/FunctionObject