12 #ifndef ESTD_INVOKE_HPP_ 13 #define ESTD_INVOKE_HPP_ 35 template<
typename Function,
typename... Args>
36 inline auto invoke(Function&&
function, Args&&... args) ->
37 decltype(std::forward<Function>(
function)(std::forward<Args>(args)...))
39 return std::forward<Function>(
function)(std::forward<Args>(args)...);
57 template<
typename T,
typename Base,
typename Derived,
typename... Args>
58 inline auto invoke(T Base::* memberFunction, Derived&&
object, Args&&... args) ->
59 decltype((std::forward<Derived>(
object).*memberFunction)(std::forward<Args>(args)...))
61 return (std::forward<Derived>(
object).*memberFunction)(std::forward<Args>(args)...);
78 template<
typename MemberFunction,
typename Pointer,
typename... Args>
79 inline auto invoke(MemberFunction memberFunction, Pointer&& pointer, Args&&... args) ->
80 decltype(((*std::forward<Pointer>(pointer)).*memberFunction)(std::forward<Args>(args)...))
82 return ((*std::forward<Pointer>(pointer)).*memberFunction)(std::forward<Args>(args)...);
98 template<
typename T,
typename Base,
typename Derived>
99 inline auto invoke(T Base::* dataMember, Derived&&
object) -> decltype(std::forward<Derived>(
object).*dataMember)
101 return std::forward<Derived>(
object).*dataMember;
116 template<
typename DataMember,
typename Po
inter>
117 inline auto invoke(DataMember dataMember, Pointer&& pointer) -> decltype((*std::forward<Pointer>(pointer)).*dataMember)
119 return (*std::forward<Pointer>(pointer)).*dataMember;
138 template<
typename Function,
typename... Args>
139 inline auto invoke(Function&&
function, Args&&... args) ->
140 decltype(
internal::invoke(std::forward<Function>(
function), std::forward<Args>(args)...))
142 return internal::invoke(std::forward<Function>(
function), std::forward<Args>(args)...);
147 #endif // ESTD_INVOKE_HPP_ Collection of useful templates.
Definition: DmaChannel.hpp:121
auto invoke(Function &&function, Args &&... args) -> decltype(std::forward< Function >(function)(std::forward< Args >(args)...))
Implementation of invoke() for function objects.
Definition: invoke.hpp:36
auto invoke(Function &&function, Args &&... args) -> decltype(internal::invoke(std::forward< Function >(function), std::forward< Args >(args)...))
Invokes callable object in an appropriate way.
Definition: invoke.hpp:139