System::Delegate< ReturnType(ArgumentTypes...)> Class Template Reference

Represents a pointer to a function, method or a function object. This type should be allocated on stack and passed to functions by value or by reference. Never use System::SmartPtr class to manage objects of this type. More...

Inherits System::Details::DelegateHoldingVariables.

Public Member Functions

 Delegate ()=default
 Default constructor. Constructs the delegate object that does not point to anything. More...
 
 Delegate (const Delegate &)=default
 
Delegateoperator= (const Delegate &)=default
 
 Delegate (Delegate &&o) noexcept
 Moving copy constructor. Takes the ownership of an entity pointed to by the specified delegate. More...
 
Delegateoperator= (Delegate &&o) noexcept
 Moving assignment operator. Takes the ownership of an entity pointed to by the specified delegate. More...
 
template<class T >
 Delegate (T function, typename std::enable_if<!std::is_bind_expression< T >::value &&std::is_pointer< T >::value &&std::is_function< typename std::remove_pointer< T >::type >::value >::type *=0)
 Constructor. Constructs a delegate object from the specified pointer to free function or static method. More...
 
template<class T >
 Delegate (T function, typename std::enable_if< std::is_bind_expression< T >::value >::type *=0)
 Constructor. Constructs a delegate from the specified pointer to the function object generated by std::bind(). More...
 
template<class T >
 Delegate (int functor_tag, T &functor)
 Constructor. Constructs a delegate from the specified function object. More...
 
template<class T >
 Delegate (long functor_tag, T &&functor)
 Moving constructor. Constructs a delegate from the specified function object. More...
 
template<class MemberType , class ClassType >
 Delegate (MemberType ClassType::*member, ClassType *obj)
 Constructor. Constructs a delegate that points to the specified non-static method of the specified object. More...
 
template<class MemberType , class MemberClass , class ClassType >
 Delegate (MemberType MemberClass::*member, const SharedPtr< ClassType > &obj)
 Constructor. Constructs a delegate that points to the specified non-static method of the specified object. More...
 
template<class R , class... Args>
 Delegate (std::function< R(Args...)> f)
 Constructs a delegate object that points to an std::function function object. More...
 
ReturnType operator() (ArgumentTypes... args) const
 Invokes a function, method or a function object that is pointed to by current delegate object. More...
 
bool operator== (const Delegate &f) const
 Compares two delegate objects to check if they point to the same entity. More...
 
bool Empty () const
 Determines if the current delegate object is empty, e.g. does not point to any entity. More...
 

Detailed Description

template<class ReturnType, class... ArgumentTypes>
class System::Delegate< ReturnType(ArgumentTypes...)>

Represents a pointer to a function, method or a function object. This type should be allocated on stack and passed to functions by value or by reference. Never use System::SmartPtr class to manage objects of this type.

#include "system/delegate.h"
#include <iostream>
// Declare the delegate.
using Message = System::Delegate<void()>;
void PrintMessage()
{
std::cout << "Hello, world!" << std::endl;
}
int main()
{
// Assign to variable the address of the PrintMessage function.
Message mes = Message(&PrintMessage);
// Call the function.
mes();
return 0;
}
/*
This code example produces the following output:
Hello, world!
*/
Template Parameters
ReturnTypeThe return type of a function, method or a function object pointer to which is represented by the class
ArgumentTypesThe argument list of a function, method or a function object pointer to which is represented by the class

Constructor & Destructor Documentation

◆ Delegate() [1/10]

template<class ReturnType , class... ArgumentTypes>
System::Delegate< ReturnType(ArgumentTypes...)>::Delegate ( )
default

Default constructor. Constructs the delegate object that does not point to anything.

◆ Delegate() [2/10]

template<class ReturnType , class... ArgumentTypes>
System::Delegate< ReturnType(ArgumentTypes...)>::Delegate ( const Delegate< ReturnType(ArgumentTypes...)> &  )
default

◆ Delegate() [3/10]

template<class ReturnType , class... ArgumentTypes>
System::Delegate< ReturnType(ArgumentTypes...)>::Delegate ( Delegate< ReturnType(ArgumentTypes...)> &&  o)
inlinenoexcept

Moving copy constructor. Takes the ownership of an entity pointed to by the specified delegate.

Parameters
oThe Delegate object to move the pointed to entity from

◆ Delegate() [4/10]

template<class ReturnType , class... ArgumentTypes>
template<class T >
System::Delegate< ReturnType(ArgumentTypes...)>::Delegate ( function,
typename std::enable_if<!std::is_bind_expression< T >::value &&std::is_pointer< T >::value &&std::is_function< typename std::remove_pointer< T >::type >::value >::type *  = 0 
)
inline

Constructor. Constructs a delegate object from the specified pointer to free function or static method.

Parameters
functionPointer to a function or a static method that will be pointed to by the newly created Delegate instance
Template Parameters
Thetype of the function or static method pointer accepted by the constructor as an argument

◆ Delegate() [5/10]

template<class ReturnType , class... ArgumentTypes>
template<class T >
System::Delegate< ReturnType(ArgumentTypes...)>::Delegate ( function,
typename std::enable_if< std::is_bind_expression< T >::value >::type *  = 0 
)
inline

Constructor. Constructs a delegate from the specified pointer to the function object generated by std::bind().

Parameters
functionPointer to a "bind expression" - a function pointer generated by std::bind() - that will be pointed to by the newly created Delegate instance
Template Parameters
Thetype of the function object generated by std::bind() accepted by the constructor as an argument

◆ Delegate() [6/10]

template<class ReturnType , class... ArgumentTypes>
template<class T >
System::Delegate< ReturnType(ArgumentTypes...)>::Delegate ( int  functor_tag,
T &  functor 
)
inline

Constructor. Constructs a delegate from the specified function object.

Parameters
functor_tagA dummy integer value; this argument is used to resolve ambiguity
functorA function object that the newly constructed delegate will point to
Template Parameters
TThe type of the function object accepted by the constructor as an argument

◆ Delegate() [7/10]

template<class ReturnType , class... ArgumentTypes>
template<class T >
System::Delegate< ReturnType(ArgumentTypes...)>::Delegate ( long  functor_tag,
T &&  functor 
)
inline

Moving constructor. Constructs a delegate from the specified function object.

Parameters
functor_tagA dummy integer value; this argument is used to resolve ambiguity
functorA function object that the newly constructed delegate will point to
Template Parameters
TThe type of the function object accepted by the constructor as an argument

◆ Delegate() [8/10]

template<class ReturnType , class... ArgumentTypes>
template<class MemberType , class ClassType >
System::Delegate< ReturnType(ArgumentTypes...)>::Delegate ( MemberType ClassType::*  member,
ClassType *  obj 
)
inline

Constructor. Constructs a delegate that points to the specified non-static method of the specified object.

Parameters
memberA pointer to the non-static method that the newly created delegate will point to
objA pointer to an object member method of which will be pointed to by the newly created delegate
Template Parameters
MemberTypeThe type of the non-static method that the constructor accepts as an argument
ClassTypeThe type of the object accepted by the constructor as an argument

◆ Delegate() [9/10]

template<class ReturnType , class... ArgumentTypes>
template<class MemberType , class MemberClass , class ClassType >
System::Delegate< ReturnType(ArgumentTypes...)>::Delegate ( MemberType MemberClass::*  member,
const SharedPtr< ClassType > &  obj 
)
inline

Constructor. Constructs a delegate that points to the specified non-static method of the specified object.

Parameters
memberA pointer to the non-static method that the newly created delegate will point to
objA shard pointer to an object member method of which will be pointed to by the newly created delegate
Template Parameters
MemberTypeThe type of the non-static method that the constructor accepts as an argument
ClassTypeThe type of the object accepted by the constructor as an argument

◆ Delegate() [10/10]

template<class ReturnType , class... ArgumentTypes>
template<class R , class... Args>
System::Delegate< ReturnType(ArgumentTypes...)>::Delegate ( std::function< R(Args...)>  f)
inline

Constructs a delegate object that points to an std::function function object.

Parameters
fA function object to be pointed to by the newly created delegate object
Template Parameters
RThe return type of the function object accepted by the constructor as an argument
ArgsThe argument list of the function object accepted by the constructor as an argument

Member Function Documentation

◆ Empty()

template<class ReturnType , class... ArgumentTypes>
bool System::Delegate< ReturnType(ArgumentTypes...)>::Empty ( ) const
inline

Determines if the current delegate object is empty, e.g. does not point to any entity.

Returns
True if current delegate object does not point to a function, a method of a function object, otherwise - false.

◆ operator()()

template<class ReturnType , class... ArgumentTypes>
ReturnType System::Delegate< ReturnType(ArgumentTypes...)>::operator() ( ArgumentTypes...  args) const
inline

Invokes a function, method or a function object that is pointed to by current delegate object.

Parameters
argsArguments to pass to the invoked entity
Returns
The value returned by invoked entity

◆ operator=() [1/2]

template<class ReturnType , class... ArgumentTypes>
Delegate& System::Delegate< ReturnType(ArgumentTypes...)>::operator= ( const Delegate< ReturnType(ArgumentTypes...)> &  )
default

◆ operator=() [2/2]

template<class ReturnType , class... ArgumentTypes>
Delegate& System::Delegate< ReturnType(ArgumentTypes...)>::operator= ( Delegate< ReturnType(ArgumentTypes...)> &&  o)
inlinenoexcept

Moving assignment operator. Takes the ownership of an entity pointed to by the specified delegate.

Parameters
oThe Delegate object to move the pointed to entity from
Returns
A reference to the self

◆ operator==()

template<class ReturnType , class... ArgumentTypes>
bool System::Delegate< ReturnType(ArgumentTypes...)>::operator== ( const Delegate< ReturnType(ArgumentTypes...)> &  f) const
inline

Compares two delegate objects to check if they point to the same entity.

Parameters
fA delegate object to compare current delegate object with
Returns
True if both delegates point the same entity, otherwise - false