Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      Function objects

      From cppreference.com
      <cpp‎ |utility
       
       
      Utilities library
       
      Function objects
      Function invocation
      (C++17)(C++23)
      Identity function object
      (C++20)
      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++20*)
      (until C++20*)
      (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++20*)
      (until C++20*)
       

      Afunction 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.

      Contents

      [edit]Function invocation

      The exposition-only operationINVOKE(f, arg_0, arg_1, arg_2, ..., arg_N) is defined as follows:

      Let typeObj be the unqualified type ofarg_0 (i.e.,std::remove_cv<std::remove_reference<decltype(arg_0)>::type>::type)

      • (obj.*f)(arg_1, arg_2, ..., arg_N) (invoke the member function on the object).
      • (obj.get().*f)(arg_1, arg_2, ..., arg_N) (invoke the member function on the specially referred object).
      • Otherwise
      • ((*obj).*f)(arg_1, arg_2, ..., arg_N) (invoke the member function on the dereferenced object).
      • obj.*mptr (access the data member of the object).
      • obj.get().*mptr (access the data member of the specially referred object).
      • Otherwise
      • (*obj).*mptr (access the data member of the dereferenced object).
      • Otherwise
      • INVOKE(f, arg_0, arg_1, arg_2, ..., arg_N) is equivalent tof(arg_0, arg_1, arg_2, ..., arg_N) (invoke the callable).


      The exposition-only operationINVOKE<R>(f, arg_0, arg_1, arg_2, ..., arg_N) is defined as follows:

      • IfR is (possibly cv-qualified)void
      • static_cast<void>(INVOKE(f, arg_0, arg_1, arg_2, ..., arg_N)).
      • Otherwise
      • INVOKE(f, arg_0, arg_1, arg_2, ..., arg_N) implicitly converted toR.

      Let typeActual bedecltype(INVOKE(f, arg_0, arg_1, arg_2, ..., arg_N))

      • INVOKE<R>(f, arg_0, arg_1, arg_2, ..., arg_N) is ill-formed.
      (since C++23)
      (since C++11)


      std::invoke andstd::invoke_r(since C++23) can invoke anyCallable object with given arguments according to the rules ofINVOKE andINVOKE<R>(since C++23).

      (C++17)(C++23)
      invokes anyCallable object with given argumentsand possibility to specify return type(since C++23)
      (function template)[edit]

      [edit]Function wrappers

      These polymorphic wrapper classes provide support for storing arbitrary function objects.

      (C++11)
      copyable wrapper of any copy constructible callable object
      (class template)[edit]
      move-only wrapper of any callable object that supports qualifiers in a given call signature
      (class template)[edit]
      copyable wrapper of any copy constructible callable object that supports qualifiers in a given call signature
      (class template)[edit]
      non-owning wrapper of any callable object
      (class template)[edit]
      the exception thrown when invoking an emptystd::function
      (class)[edit]
      (C++11)
      creates a function object out of a pointer to a member
      (function template)[edit]

      [edit]Identity

      std::identity is the identity function object: it returns its argument unchanged.

      (C++20)
      function object that returns its argument unchanged
      (class)[edit]

      [edit]Partial function application

      std::bind_front andstd::bind provide support forpartial function application, i.e. binding arguments to functions to produce new functions.

      (C++20)(C++23)
      bind a variable number of arguments, in order, to a function object
      (function template)[edit]
      (C++11)
      binds one or more arguments to a function object
      (function template)[edit]
      indicates that an object isstd::bind expression or can be used as one
      (class template)[edit]
      indicates that an object is a standard placeholder or can be used as one
      (class template)[edit]
      Defined in namespacestd::placeholders
      placeholders for the unbound arguments in astd::bind expression
      (constant)[edit]

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

      [edit]Searchers

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

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

      [edit]Reference wrappers

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

      CopyConstructible andCopyAssignable reference wrapper
      (class template)[edit]
      (C++11)(C++11)
      creates astd::reference_wrapper with a type deduced from its argument
      (function template)[edit]
      get the reference type wrapped instd::reference_wrapper
      (class template)[edit]

      Transparent function objects

      Associative containers andunordered associative containers(since C++20) provide heterogeneous lookup and erasure(since C++23) operations, but they are only enabled if the supplied function object typeT istransparent : the qualified identifierT::is_transparent is valid and denotes a type.

      All transparent function object types in the standard library define a nested typeis_transparent. However, user-defined transparent function object types do not need to directly provideis_transparent as a nested type: it can be defined in a base class, as long asT::is_transparent satisfies the transparent requirement stated above.

      (since C++14)

      [edit]Operator function objects

      C++ defines the following function objects that represent common arithmetic and logical operations.

      Thevoid specializations deduce their parameter types and return types from their arguments, they are alltransparent.

      (since C++14)
      Arithmetic operations
      function object implementingx+ y
      (class template)[edit]
      (C++14)
      function object implementingx+ y deducing parameter and return types
      (class template specialization)[edit]
      function object implementingx- y
      (class template)[edit]
      function object implementingx- y deducing parameter and return types
      (class template specialization)[edit]
      function object implementingx* y
      (class template)[edit]
      function object implementingx* y deducing parameter and return types
      (class template specialization)[edit]
      function object implementingx/ y
      (class template)[edit]
      function object implementingx/ y deducing parameter and return types
      (class template specialization)[edit]
      function object implementingx% y
      (class template)[edit]
      function object implementingx% y deducing parameter and return types
      (class template specialization)[edit]
      function object implementing-x
      (class template)[edit]
      function object implementing-x deducing parameter and return types
      (class template specialization)[edit]
      Comparisons
      function object implementingx== y
      (class template)[edit]
      function object implementingx== y deducing parameter and return types
      (class template specialization)[edit]
      function object implementingx!= y
      (class template)[edit]
      function object implementingx!= y deducing parameter and return types
      (class template specialization)[edit]
      function object implementingx> y
      (class template)[edit]
      function object implementingx> y deducing parameter and return types
      (class template specialization)[edit]
      function object implementingx< y
      (class template)[edit]
      (C++14)
      function object implementingx< y deducing parameter and return types
      (class template specialization)[edit]
      function object implementingx>= y
      (class template)[edit]
      function object implementingx>= y deducing parameter and return types
      (class template specialization)[edit]
      function object implementingx<= y
      (class template)[edit]
      function object implementingx<= y deducing parameter and return types
      (class template specialization)[edit]
      Logical operations
      function object implementingx&& y
      (class template)[edit]
      function object implementingx&& y deducing parameter and return types
      (class template specialization)[edit]
      function object implementingx|| y
      (class template)[edit]
      function object implementingx|| y deducing parameter and return types
      (class template specialization)[edit]
      function object implementing!x
      (class template)[edit]
      function object implementing!x deducing parameter and return types
      (class template specialization)[edit]
      Bitwise operations
      function object implementingx& y
      (class template)[edit]
      function object implementingx& y deducing parameter and return types
      (class template specialization)[edit]
      function object implementingx| y
      (class template)[edit]
      function object implementingx| y deducing parameter and return types
      (class template specialization)[edit]
      function object implementingx^ y
      (class template)[edit]
      function object implementingx^ y deducing parameter and return types
      (class template specialization)[edit]
      (C++14)
      function object implementing~x
      (class template)[edit]
      function object implementing~x deducing parameter and return types
      (class template specialization)[edit]


      Constrained comparison function objects

      The following comparison function objects areconstrained.

      • The equality operators (ranges::equal_to andranges::not_equal_to) require the types of the arguments to satisfyequality_comparable_with.
      • The relational operators (ranges::less,ranges::greater,ranges::less_equal, andranges::greater_equal) require the types of the arguments to satisfytotally_ordered_with.
      • The three-way comparison operator (compare_three_way) requires the type to modelthree_way_comparable_with.

      All these function objects aretransparent.

      constrained function object implementingx== y
      (class)[edit]
      constrained function object implementingx!= y
      (class)[edit]
      constrained function object implementingx< y
      (class)[edit]
      constrained function object implementingx> y
      (class)[edit]
      constrained function object implementingx<= y
      (class)[edit]
      constrained function object implementingx>= y
      (class)[edit]
      constrained function object implementingx<=> y
      (class)[edit]
      (since C++20)


      Helper items

      Following exposition-only items are used for several components in the standard library but they are not part of the interface of the standard library.

      template<class Fn,class...Args>

      concept/*callable*/=
          requires(Fn&& fn, Args&&...args){
             std::forward<Fn>(fn)(std::forward<Args>(args)...);

         };
      (1)(exposition only*)
      template<class Fn,class...Args>

      concept/*nothrow-callable*/=
         /*callable*/<Fn, Args...>&&
          requires(Fn&& fn, Args&&...args){
             {std::forward<Fn>(fn)(std::forward<Args>(args)...)}noexcept;

         };
      (2)(exposition only*)
      template<class Fn,class...Args>
      using/*call-result-t*/= decltype(std::declval<Fn>()(std::declval<Args>()...));
      (3)(exposition only*)
      template<constauto& T>
      using/*decayed-typeof*/= decltype(auto(T));
      (4)(exposition only*)
      (since C++26)


      Old binders and adaptors

      Several utilities that provided early functional support are deprecated and removed:

      Base
      (deprecated in C++11)(removed in C++17)
      adaptor-compatible unary function base class
      (class template)[edit]
      (deprecated in C++11)(removed in C++17)
      adaptor-compatible binary function base class
      (class template)[edit]
      Binders
      (deprecated in C++11)(removed in C++17)
      function object holding a binary function and one of its arguments
      (class template)[edit]
      (deprecated in C++11)(removed in C++17)
      binds one argument to a binary function
      (function template)[edit]
      Function adaptors
      (deprecated in C++11)(removed in C++17)
      adaptor-compatible wrapper for a pointer to unary function
      (class template)[edit]
      (deprecated in C++11)(removed in C++17)
      adaptor-compatible wrapper for a pointer to binary function
      (class template)[edit]
      (deprecated in C++11)(removed in C++17)
      creates an adaptor-compatible function object wrapper from a pointer to function
      (function template)[edit]
      (deprecated in C++11)(removed in C++17)
      wrapper for a pointer to nullary or unary member function, callable with a pointer to object
      (class template)[edit]
      (deprecated in C++11)(removed in C++17)
      creates a wrapper from a pointer to member function, callable with a pointer to object
      (function template)[edit]
      wrapper for a pointer to nullary or unary member function, callable with a reference to object
      (class template)[edit]
      (deprecated in C++11)(removed in C++17)
      creates a wrapper from a pointer to member function, callable with a reference to object
      (function template)[edit]
      (deprecated in C++17)(removed in C++20)
      wrapper function object returning the complement of the unary predicate it holds
      (class template)[edit]
      (deprecated in C++17)(removed in C++20)
      wrapper function object returning the complement of the binary predicate it holds
      (class template)[edit]
      (deprecated in C++17)(removed in C++20)
      constructs customstd::unary_negate object
      (function template)[edit]
      (deprecated in C++17)(removed in C++20)
      constructs customstd::binary_negate object
      (function template)[edit]
      (until C++20)

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 185C++98using function objects improved the program efficiencyremoved the claim
      LWG 660C++98function objects for bitwise operations are missingadded
      LWG 2149C++98function objects taking one or two arguments were required to
      provide nested types to denote the argument and result types
      not required
      LWG 2219C++11INVOKE did not handlestd::reference_wrapper correctlyhandles correctly
      LWG 2420C++11INVOKE<R> did not discard the return value ifR isvoiddiscards the return value in this case
      LWG 2926
      (P0604R0)
      C++11the syntax of theINVOKE operation with a return
      typeR wasINVOKE(f, t1, t2, ..., tN, R)
      changed to
      INVOKE<R>(f, t1, t2, ..., tN)
      LWG 3655C++11INVOKE did not handle unions correctly
      due to the resolution ofLWG issue 2219
      handles correctly
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/functional&oldid=183365"

      [8]ページ先頭

      ©2009-2025 Movatter.jp