22 #include <type_traits> 29 template <
typename LockableObject,
typename Function,
typename... Arguments>
30 constexpr std::enable_if_t<std::is_invocable_v<Function, Arguments...>> invoke(
31 LockableObject & lockableObject, Function &
function,
32 Arguments &&... arguments)
34 const auto lockedObject = lockableObject.lock();
36 std::invoke(
function, std::forward<Arguments>(arguments)...);
40 template <
typename LockableObject,
typename Function,
typename... Arguments>
41 constexpr std::enable_if_t<
42 !std::is_invocable_v<Function, Arguments...> &&
43 std::is_member_function_pointer_v<Function>>
45 LockableObject & lockableObject, Function &
function,
46 Arguments &&... arguments)
48 const auto lockedObject = lockableObject.lock();
51 function, *lockedObject, std::forward<Arguments>(arguments)...);
73 template <
typename LockableObject,
typename Function>
77 template <
typename SomeLockableObject,
typename SomeFunction>
79 SomeLockableObject && someLockableObject, SomeFunction &&
function) :
80 m_lockableObject{std::forward<SomeLockableObject>(someLockableObject)},
81 m_function{std::forward<SomeFunction>(
function)}
85 typename... Arguments,
86 typename = std::enable_if_t<
87 std::is_invocable_v<Function, Arguments...> ||
88 std::is_member_function_pointer_v<Function>>>
89 constexpr
void operator()(Arguments &&... arguments)
92 m_lockableObject, m_function,
93 std::forward<Arguments>(arguments)...);
97 typename... Arguments,
98 typename = std::enable_if_t<
99 std::is_invocable_v<Function, Arguments...> ||
100 std::is_member_function_pointer_v<Function>>>
101 constexpr
void operator()(Arguments &&... arguments)
const 104 m_lockableObject, m_function,
105 std::forward<Arguments>(arguments)...);
109 LockableObject m_lockableObject;
113 template <
typename LockableObject,
typename Function>
Definition: threading/Factory.h:24
Definition: TrackedTask.h:74