8#include "Arp/Base/Core/Detail/IDelegateFunctor.hpp"
10namespace Arp {
namespace Base {
namespace Core
32template<
class R,
class ...A>
36 using IDelegateFunctor = Arp::Base::Core::IDelegateFunctor;
37 using FunctorPtr = std::shared_ptr<IDelegateFunctor>;
38 using InvokerPtr = R(*)(IDelegateFunctor*, A...);
42 template<
class Lambda>
delegate(Lambda f);
48 static delegate create(R(*
const pFunction)(A...));
49 static delegate create(std::function<R(A...)>&& f);
50 static delegate create(
const std::function<R(A...)>& f);
52 template <
class C>
static delegate create(C* pObject, R(C::* pMethod)(A...))noexcept;
53 template <class C> static
delegate create(C&
object, R(C::* pMethod)(A...))noexcept;
54 template <class C> static
delegate create(const C* pObject, R(C::* pMethod)(A...)const)noexcept;
55 template <class C> static
delegate create(const C&
object, R(C::* pMethod)(A...)const)noexcept;
58 bool operator==(const
delegate& rhs)const noexcept;
59 bool operator!=(const
delegate& rhs)const noexcept;
60 bool operator==(
std::nullptr_t const)const noexcept;
61 bool operator!=(
std::nullptr_t const)const noexcept;
62 operator
bool()const noexcept;
65 bool is_lambda(
void)const;
68 R operator()(A... args)const;
74 delegate(FunctorPtr&& pFunctor, InvokerPtr pInvoker)noexcept;
77 InvokerPtr pInvoker =
nullptr;
78 FunctorPtr functorPtr =
nullptr;
84template<class R, class ...A>
85delegate<R(A...)> make_delegate(R(* const function_ptr)(A...))noexcept;
87template<class C, class R, class ...A>
88delegate<R(A...)> make_delegate(C* const pObject, R(C::* const pMethod)(A...))noexcept;
90template<class C, class R, class ...A>
91delegate<R(A...)> make_delegate(C const* const pObject, R(C::* const pMethod)(A...)const)noexcept;
93template<class C, class R, class ...A>
94delegate<R(A...)> make_delegate(C&
object, R(C::* const pMethod)(A...))noexcept;
96template<class C, class R, class ...A>
97delegate<R(A...)> make_delegate(const C&
object, R(C::* const pMethod)(A...)const)noexcept;
99template<class R, class ...A>
100delegate<R(A...)> make_delegate(
std::function<R(A...)>&& f)noexcept;
102template<class R, class ...A>
103delegate<R(A...)> make_delegate(const
std::function<R(A...)>& f)noexcept;
111using Arp::Base::Core::make_delegate;
113#include "Arp/Base/Core/Detail/delegate.ipp"
delegate(void)
The default constructor.
Prototyping of delegate template.
Definition: delegate.hxx:14
Root namespace for the PLCnext API
Namespace of the C++ standard library