25namespace quentier::threading {
29template <
typename LockableObject,
typename Function,
typename... Arguments>
30constexpr 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)...);
40template <
typename LockableObject,
typename Function,
typename... Arguments>
41constexpr 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)...);
73template <
typename LockableObject,
typename Function>
77 template <
typename SomeLockableObject,
typename SomeFunction>
81 m_function{std::forward<SomeFunction>(
function)}
86 typename = std::enable_if_t<
88 std::is_member_function_pointer_v<Function>>>
92 m_lockableObject, m_function,
98 typename = std::enable_if_t<
100 std::is_member_function_pointer_v<Function>>>
104 m_lockableObject, m_function,
113template <
typename LockableObject,
typename Function>
The Result template class represents the bare bones result monad implementation which either contains...
Definition Result.h:38
Definition TrackedTask.h:75