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.
- The type
T
satisfiesstd::is_object
, and
Given.
-
f
, a value of typeT
orconst 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
- All pointers to functions satisfy this requirement.
- All function objects defined in
<functional>
- Some return types of functions of
<functional>
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