functional¶
The contents of this module can be included with the header
hpx/modules/functional.hpp
. These headers may be used by user-code but are not
guaranteed stable (neither header location nor contents). You are using these at
your own risk. If you wish to use non-public functionality from a module we
strongly suggest only including the module header hpx/modules/functional.hpp
, not
the particular header in which the functionality you would like to use is
defined. See Public API for a list of names that are part of the public
HPX API.
Header hpx/functional/bind.hpp
¶
-
namespace
hpx
-
namespace
serialization
-
namespace
util
Functions
-
template<typename
F
, typename ...Ts
, typenameEnable
= typename std::enable_if<!traits::is_action<typename std::decay<F>::type>::value>::type>
constexpr detail::bound<typename std::decay<F>::type, typename util::make_index_pack<sizeof...(Ts)>::type, typename util::decay_unwrap<Ts>::type...>bind
(F &&f, Ts&&... vs)¶
-
namespace
placeholders
¶ Variables
-
constexpr detail::placeholder<1>
_1
= {}¶
-
constexpr detail::placeholder<2>
_2
= {}¶
-
constexpr detail::placeholder<3>
_3
= {}¶
-
constexpr detail::placeholder<4>
_4
= {}¶
-
constexpr detail::placeholder<5>
_5
= {}¶
-
constexpr detail::placeholder<6>
_6
= {}¶
-
constexpr detail::placeholder<7>
_7
= {}¶
-
constexpr detail::placeholder<8>
_8
= {}¶
-
constexpr detail::placeholder<9>
_9
= {}¶
-
constexpr detail::placeholder<1>
-
template<typename
-
namespace
Header hpx/functional/bind_back.hpp
¶
-
namespace
hpx
-
namespace
serialization
-
namespace
util
-
namespace
Header hpx/functional/bind_front.hpp
¶
-
namespace
hpx
-
namespace
serialization
-
namespace
util
-
namespace
Header hpx/functional/deferred_call.hpp
¶
-
namespace
hpx
-
namespace
serialization
-
namespace
util
-
namespace
Header hpx/functional/first_argument.hpp
¶
Header hpx/functional/function.hpp
¶
Defines
-
HPX_UTIL_REGISTER_FUNCTION_DECLARATION
(Sig, F, Name)¶
-
HPX_UTIL_REGISTER_FUNCTION
(Sig, F, Name)¶
-
namespace
hpx
-
namespace
util
Typedefs
-
using
function_nonser
= function<Sig, false>¶
-
template<typename
R
, typename ...Ts
, boolSerializable
>
classfunction
<R(Ts...), Serializable> : public detail::basic_function<R(Ts...), true, Serializable>¶ - #include <function.hpp>
Public Types
-
typedef R
result_type
¶
Public Functions
-
function &
operator=
(function const&)¶
-
function &
operator=
(function&&)¶
Private Types
-
template<>
usingbase_type
= detail::basic_function<R(Ts...), true, Serializable>¶
-
typedef R
-
using
-
namespace
Header hpx/functional/function_ref.hpp
¶
-
namespace
hpx
-
namespace
util
-
template<typename
R
, typename ...Ts
>
classfunction_ref
<R(Ts...)>¶ - #include <function_ref.hpp>
Public Functions
-
template<typename
F
, typenameFD
= typename std::decay<F>::type, typenameEnable
= typename std::enable_if<!std::is_same<FD, function_ref>::value && traits::is_invocable_r<R, F&, Ts...>::value>::type>function_ref
(F &&f)¶
-
function_ref
(function_ref const &other)¶
-
template<typename
F
, typenameFD
= typename std::decay<F>::type, typenameEnable
= typename std::enable_if<!std::is_same<FD, function_ref>::value && traits::is_invocable_r<R, F&, Ts...>::value>::type>
function_ref &operator=
(F &&f)¶
-
function_ref &
operator=
(function_ref const &other)¶
-
template<typename
F
, typenameT
= typename std::remove_reference<F>::type, typenameEnable
= typename std::enable_if<!std::is_pointer<T>::value>::type>
voidassign
(F &&f)¶
-
void
swap
(function_ref &f)¶
-
R
operator()
(Ts... vs) const¶
-
char const *
get_function_annotation
() const¶
-
util::itt::string_handle
get_function_annotation_itt
() const¶
Private Types
-
template<>
usingVTable
= detail::function_ref_vtable<R(Ts...)>¶
Private Static Functions
-
template<typename
T
>
static VTable const *get_vtable
()¶
-
template<typename
-
template<typename
-
namespace
Header hpx/functional/invoke.hpp
¶
-
namespace
hpx
-
namespace
util
Functions
-
template<typename
F
, typename ...Ts
>
constexpr util::invoke_result<F, Ts...>::typeinvoke
(F &&f, Ts&&... vs)¶ Invokes the given callable object f with the content of the argument pack vs
- Return
The result of the callable object when it’s called with the given argument types.
- Note
This function is similar to
std::invoke
(C++17)- Parameters
f
: Requires to be a callable object. If f is a member function pointer, the first argument in the pack will be treated as the callee (this object).vs
: An arbitrary pack of arguments
- Exceptions
std::exception
: like objects thrown by call to object f with the argument types vs.
-
template<typename
R
, typenameF
, typename ...Ts
>
constexpr Rinvoke_r
(F &&f, Ts&&... vs)¶ Invokes the given callable object f with the content of the argument pack vs
- Return
The result of the callable object when it’s called with the given argument types.
- Note
This function is similar to
std::invoke
(C++17)- Parameters
f
: Requires to be a callable object. If f is a member function pointer, the first argument in the pack will be treated as the callee (this object).vs
: An arbitrary pack of arguments
- Exceptions
std::exception
: like objects thrown by call to object f with the argument types vs.
- Template Parameters
R
: The result type of the function when it’s called with the content of the given argument types vs.
-
template<typename
-
namespace
Header hpx/functional/invoke_fused.hpp
¶
-
namespace
hpx
-
namespace
util
Functions
-
template<typename
F
, typenameTuple
>
constexpr detail::invoke_fused_result<F, Tuple>::typeinvoke_fused
(F &&f, Tuple &&t)¶ Invokes the given callable object f with the content of the sequenced type t (tuples, pairs)
- Return
The result of the callable object when it’s called with the content of the given sequenced type.
- Note
This function is similar to
std::apply
(C++17)- Parameters
f
: Must be a callable object. If f is a member function pointer, the first argument in the sequenced type will be treated as the callee (this object).t
: A type which is content accessible through a call to hpx::util::get.
- Exceptions
std::exception
: like objects thrown by call to object f with the arguments contained in the sequenceable type t.
-
template<typename
R
, typenameF
, typenameTuple
>
constexpr Rinvoke_fused_r
(F &&f, Tuple &&t)¶ Invokes the given callable object f with the content of the sequenced type t (tuples, pairs)
- Return
The result of the callable object when it’s called with the content of the given sequenced type.
- Note
This function is similar to
std::apply
(C++17)- Parameters
f
: Must be a callable object. If f is a member function pointer, the first argument in the sequenced type will be treated as the callee (this object).t
: A type which is content accessible through a call to hpx::util::get.
- Exceptions
std::exception
: like objects thrown by call to object f with the arguments contained in the sequenceable type t.
- Template Parameters
R
: The result type of the function when it’s called with the content of the given sequenced type.
-
template<typename
-
namespace
Header hpx/functional/invoke_result.hpp
¶
-
namespace
hpx
-
namespace
util
Functions
-
template<typename T>struct hpx::util::HPX_DEPRECATED_V(1, 5, "result_of is deprecated, use invoke_result instead.")
-
-
namespace
Header hpx/functional/mem_fn.hpp
¶
-
namespace
hpx
-
namespace
util
-
namespace
Header hpx/functional/one_shot.hpp
¶
-
namespace
hpx
-
namespace
serialization
-
namespace
util
-
namespace
Header hpx/functional/protect.hpp
¶
-
namespace
hpx
-
namespace
util
-
namespace
Header hpx/functional/serialization/serializable_function.hpp
¶
Header hpx/functional/serialization/serializable_unique_function.hpp
¶
Header hpx/functional/tag_invoke.hpp
¶
-
namespace
hpx
-
namespace
functional
Typedefs
-
using
tag_invoke_result
= invoke_result<decltype(tag_invoke), Tag, Args...>¶ hpx::functional::tag_invoke_result<Tag, Args...>
is the trait returning the result type of the call hpx::functioanl::tag_invoke. This can be used in a SFINAE context.
-
using
tag_invoke_result_t
= typename tag_invoke_result<Tag, Args...>::type¶ hpx::functional::tag_invoke_result_t<Tag, Args...>
evaluates tohpx::functional::tag_invoke_result_t<Tag, Args...>::type
Variables
-
template<typename
Tag
, typename ...Args
>
constexpr boolis_tag_invocable_v
= is_tag_invocable<Tag, Args...>::value¶ hpx::functional::is_tag_invocable_v<Tag, Args...>
evaluates tohpx::functional::is_tag_invocable<Tag, Args...>::value
-
template<typename
Tag
, typename ...Args
>
constexpr boolis_nothrow_tag_invocable_v
= is_nothrow_tag_invocable<Tag, Args...>::value¶ hpx::functional::is_tag_invocable_v<Tag, Args...>
evaluates tohpx::functional::is_tag_invocable<Tag, Args...>::value
-
template<typename
Tag
, typename ...Args
>
structis_nothrow_tag_invocable
¶ - #include <tag_invoke.hpp>
hpx::functional::is_nothrow_tag_invocable<Tag, Args...>
is std::true_type if an overload oftag_invoke(tag, args...)
can be found via ADL and is noexcept.
-
template<typename
Tag
, typename ...Args
>
structis_tag_invocable
¶ - #include <tag_invoke.hpp>
hpx::functional::is_tag_invocable<Tag, Args...>
is std::true_type if an overload oftag_invoke(tag, args...)
can be found via ADL.
-
template<typename
Tag
>
structtag
¶ - #include <tag_invoke.hpp>
hpx::functional::tag<Tag>
defines a base class that implements the necessary tag dispatching functionality for a given typeTag
-
namespace
unspecified
¶ Variables
-
constexpr unspecified
tag_invoke
= unspecified¶ The
hpx::functional::tag_invoke
name defines a constexpr object that is invocable with one or more arguments. The first argument is a ‘tag’ (typically a CPO). It is only invocable if an overload of tag_invoke() that accepts the same arguments could be found via ADL.The evaluation of the expression
hpx::tag_invoke(tag, args...)
is equivalent to evaluating the unqualified call totag_invoke(decay-copy(tag), std::forward<Args>(args)...)
.hpx::functional::tag_invoke
is implemented against P1895.Example: Defining a new customization point
foo
:namespace mylib { inline constexpr struct foo_fn final : hpx::functional::tag<foo_fn> { } foo{}; }
Defining an object
bar
which customizesfoo
:struct bar { int x = 42; friend constexpr int tag_invoke(mylib::foo_fn, bar const& x) { return b.x; } };
Using the customization point:
static_assert(42 == mylib::foo(bar{}), "The answer is 42");
-
constexpr unspecified
-
using
-
namespace
Header hpx/functional/traits/get_action_name.hpp
¶
Header hpx/functional/traits/get_function_address.hpp
¶
-
template<typename
R
, typenameObj
, typename ...Ts
>
structget_function_address
<R (Obj::*)(Ts...)>¶ - #include <get_function_address.hpp>
-
template<typename
R
, typenameObj
, typename ...Ts
>
structget_function_address
<R (Obj::*)(Ts...) const>¶ - #include <get_function_address.hpp>
-
namespace
hpx
-
namespace
traits
-
template<typename
F
, typenameEnable
= void>
structget_function_address
¶ - #include <get_function_address.hpp>
-
template<typename
R
, typename ...Ts
>
structget_function_address
<R (*)(Ts...)>¶ - #include <get_function_address.hpp>
-
template<typename
-
namespace
Header hpx/functional/traits/get_function_annotation.hpp
¶
Header hpx/functional/traits/is_action.hpp
¶
Header hpx/functional/traits/is_bind_expression.hpp
¶
Header hpx/functional/traits/is_invocable.hpp
¶
-
namespace
hpx
-
namespace
traits
Functions
-
template<typename T, typename R = void>struct hpx::traits::HPX_DEPRECATED_V(1, 5, "is_callable is deprecated, use is_invocable instead.")
-
-
namespace
Header hpx/functional/traits/is_placeholder.hpp
¶
-
namespace
hpx
-
namespace
traits
-
template<typename
T
>
structis_placeholder
¶ - #include <is_placeholder.hpp>
If
T
is a standard, Boost, or HPX placeholder (_1, _2, _3, …) then this template is derived fromstd::integral_constant<int, 1>
,std::integral_constant<int, 2>
,std::integral_constant<int, 3>
, respectively. Otherwise it is derived from ,std::integral_constant<int, 0>
.
-
template<typename
-
namespace
Header hpx/functional/unique_function.hpp
¶
Defines
-
HPX_UTIL_REGISTER_UNIQUE_FUNCTION_DECLARATION
(Sig, F, Name)¶
-
HPX_UTIL_REGISTER_UNIQUE_FUNCTION
(Sig, F, Name)¶
-
namespace
hpx
-
namespace
util
Typedefs
-
using
unique_function_nonser
= unique_function<Sig, false>¶
-
template<typename
R
, typename ...Ts
, boolSerializable
>
classunique_function
<R(Ts...), Serializable> : public detail::basic_function<R(Ts...), false, Serializable>¶ - #include <unique_function.hpp>
Public Types
-
typedef R
result_type
¶
Public Functions
-
unique_function
(unique_function&&)¶
-
unique_function &
operator=
(unique_function&&)¶
Private Types
-
template<>
usingbase_type
= detail::basic_function<R(Ts...), false, Serializable>¶
-
typedef R
-
using
-
namespace