Namespaces
Variants
Actions

C++ named requirements: FunctionObject

From cppreference.com
< cpp‎ | named req
 
C++
 
C++ named requirements
 

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

Contents

[edit] 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

[edit] 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.

[edit] Standard library

[edit] Example

Demonstrates different types of function objects.

#include <functional>
#include <iostream>
 
void foo(int x) { std::cout << "foo(" << x << ")\n"; }
void bar(int x) { std::cout << "bar(" << x << ")\n"; }
 
int main()
{
    void(*fp)(int) = foo;
    fp(1); / calls foo using the pointer to function
 
    std::invoke(fp, 2); / all FunctionObject types are Callable
 
    auto fn = std::function(foo); / see also the rest of <functional>
    fn(3);
    fn.operator()(3); / the same effect as fn(3)
 
    struct S
    {
        void operator()(int x) const { std::cout << "S::operator(" << x << ")\n"; }
    } s;
    s(4); / calls s.operator()
    s.operator()(4); / the same as s(4)
 
    auto lam = [](int x) { std::cout << "lambda(" << x << ")\n"; };
    lam(5); / calls the lambda
    lam.operator()(5); / the same as lam(5)
 
    struct T
    {
        using FP = void (*)(int);
        operator FP() const { return bar; }
    } t;
    t(6); / t is converted to a function pointer
    static_cast<void (*)(int)>(t)(6); / the same as t(6)
    t.operator T::FP()(6); / the same as t(6) 
}

Output:

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

[edit] See also

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

Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant