xtd 0.2.0
Loading...
Searching...
No Matches
xtd::delegate< result_t(arguments_t...)> Class Template Reference
Inheritance diagram for xtd::delegate< result_t(arguments_t...)>:
xtd::object xtd::iequatable< delegate< result_t(arguments_t...)> > xtd::interface xtd::equality_operators< type_t, equatable_t >

Definition

template<typename result_t, typename... arguments_t>
class xtd::delegate< result_t(arguments_t...)>

Represents a delegate, which is a data structure that refers to a static method or to a class instance && an instance method of that class.

Header
#include <xtd/delegate>
Namespace
xtd
Library
xtd.core
Remarks
For more info about delegates see Delegates guide.
Examples
The following example shows how to define a delegate named my Method delegate. Instances of this delegate are created for an instance method && a static method of the nested mySampleClass class. The delegate for the instance method requires an instance of mySampleClass. The mySampleClass instance is saved in a variable named mySC.
#include <xtd/console>
#include <xtd/delegate>
using namespace xtd;
void goodbye(const string& s) {
console::write_line("Goodbye {}", s);
}
class object {
public:
void hello(const string& s) {
console::write_line("Hello {}", s);
}
};
auto main() -> int {
using example_function = delegate<void(const string&)>;
auto instance = ::object {};
auto str = string {"World"};
//equivanet to : example_function f = {std::bind(&::object::hello, &instance, std::placeholders::_1)};
auto f = example_function {instance, &::object::hello};
// equivalent to : instance.hello(str)
f(str);
f = goodbye;
// equivalent to : goodbye(str)
f(str);
return 0;
}
// This code produces the following output :
//
// Hello, World
// Goodbye, World
static void write_line()
Writes the current line terminator to the standard output stream using the specified format informati...
delegate()=default
Initializes an empty delegate.
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.hpp:42
object()=default
Create a new instance of the ultimate base class object.
@ s
The S key.
@ f
The F key.
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition xtd_about_box.hpp:10

Public Aliases

using no_arguments_function_t = std::function< result_t()>
 no_arguments_function_t pointer type
 
using function_t = std::function< result_t(arguments_t...)>
 function_t pointer type
 

Public Constructors

 delegate ()=default
 Initializes an empty delegate.
 
 delegate (const function_t &function) noexcept
 Initializes a delegate that invokes the specified instance method.
 
template<typename object1_t , typename object2_t >
 delegate (const object1_t &object, result_t(object2_t::*method)() const) noexcept
 Initializes a delegate that invokes the specified instance method on the specified class instance.
 
template<typename object1_t , typename object2_t >
 delegate (const object1_t &object, result_t(object2_t::*method)()) noexcept
 Initializes a delegate that invokes the specified instance method on the specified class instance.
 

Public Properties

const std::vector< no_arguments_function_t > & no_arguments_functions () const
 Gets the no arguments delegates array.
 
const std::vector< function_t > & functions () const
 Gets the delegates array.
 
bool is_empty () const noexcept
 Return if the delegate is empty.
 
size_t size () const noexcept
 Return the size of invocation list.
 

Public Methods

async_result begin_invoke (arguments_t... arguments)
 Executes the method represented by the current delegate asynchronously on the thread that the control's underlying handle was created on.
 
async_result begin_invoke (xtd::async_callback async_callback, arguments_t... arguments)
 Executes the method represented by the current delegate asynchronously on the thread that the control's underlying handle was created on.
 
async_result begin_invoke (xtd::async_callback async_callback, std::any async_state, arguments_t... arguments)
 Executes the method represented by the current delegate asynchronously on the thread that the control's underlying handle was created on.
 
result_t end_invoke (async_result async)
 Retrieves the return value of the asynchronous operation represented by the async_result_invoke passed.
 
result_t invoke (arguments_t... arguments) const
 invokes the method represented by the current delegate.
 
bool equals (const delegate &delegate) const noexcept override
 Determines whether this instance and another specified delegateType object have the same value.
 
virtual bool equals (const object &obj) const noexcept
 Determines whether the specified object is equal to the current object.
 
template<typename object_a_t , typename object_b_t >
static bool equals (const object_a_t &object_a, const object_b_t &object_b) noexcept
 Determines whether the specified object instances are considered equal.
 

Operators

result_t operator() (arguments_t... arguments) const
 invokes the method represented by the current delegate.
 

Public Static Methods

static delegate combine (const std::vector< delegate > &delegates) noexcept
 Concatenates the invocation lists of an array of delegates.
 
static delegate combine (const delegate &a, const delegate &b) noexcept
 Concatenates the invocation lists of two delegates.
 
static delegate remove (const delegate &source, const delegate &value) noexcept
 removes the last occurrence of the invocation list of a delegate from the invocation list of another delegate.
 
static delegate remove_all (const delegate &source, const delegate &value) noexcept
 removes all occurrences of the invocation list of a delegate from the invocation list of another delegate.
 

Additional Inherited Members

- Public Member Functions inherited from xtd::object
 object ()=default
 Create a new instance of the ultimate base class object.
 
virtual size_t get_hash_code () const noexcept
 Serves as a hash function for a particular type.
 
virtual type_object get_type () const noexcept
 Gets the type of the current instance.
 
template<typename object_t >
xtd::uptr< object_t > memberwise_clone () const
 Creates a shallow copy of the current object.
 
virtual xtd::string to_string () const noexcept
 Returns a xtd::string that represents the current object.
 
- Public Member Functions inherited from xtd::iequatable< delegate< result_t(arguments_t...)> >
virtual bool equals (const delegate< result_t(arguments_t...)> &) const noexcept=0
 Indicates whether the current object is equal to another object of the same type.
 
- Static Public Member Functions inherited from xtd::object
template<typename object_a_t , typename object_b_t >
static bool equals (const object_a_t &object_a, const object_b_t &object_b) noexcept
 Determines whether the specified object instances are considered equal.
 
template<typename object_a_t , typename object_b_t >
static bool reference_equals (const object_a_t &object_a, const object_b_t &object_b) noexcept
 Determines whether the specified object instances are the same instance.
 

Member Typedef Documentation

◆ no_arguments_function_t

template<typename result_t , typename... arguments_t>
using xtd::delegate< result_t(arguments_t...)>::no_arguments_function_t = std::function <result_t()>

no_arguments_function_t pointer type

◆ function_t

template<typename result_t , typename... arguments_t>
using xtd::delegate< result_t(arguments_t...)>::function_t = std::function <result_t(arguments_t...)>

function_t pointer type

Constructor & Destructor Documentation

◆ delegate() [1/4]

template<typename result_t , typename... arguments_t>
xtd::delegate< result_t(arguments_t...)>::delegate ( )
default

Initializes an empty delegate.

◆ delegate() [2/4]

template<typename result_t , typename... arguments_t>
xtd::delegate< result_t(arguments_t...)>::delegate ( const function_t function)
inlinenoexcept

Initializes a delegate that invokes the specified instance method.

Parameters
functionthe method instance.

◆ delegate() [3/4]

template<typename result_t , typename... arguments_t>
template<typename object1_t , typename object2_t >
xtd::delegate< result_t(arguments_t...)>::delegate ( const object1_t &  object,
result_t(object2_t::*)() const  method 
)
inlinenoexcept

Initializes a delegate that invokes the specified instance method on the specified class instance.

Parameters
objectthe class instance.
functionthe method instance.

◆ delegate() [4/4]

template<typename result_t , typename... arguments_t>
template<typename object1_t , typename object2_t >
xtd::delegate< result_t(arguments_t...)>::delegate ( const object1_t &  object,
result_t(object2_t::*)()  method 
)
inlinenoexcept

Initializes a delegate that invokes the specified instance method on the specified class instance.

Parameters
objectthe class instance.
functionthe method instance.

Member Function Documentation

◆ no_arguments_functions()

template<typename result_t , typename... arguments_t>
const std::vector< no_arguments_function_t > & xtd::delegate< result_t(arguments_t...)>::no_arguments_functions ( ) const
inline

Gets the no arguments delegates array.

Returns
The delegates array.

◆ functions()

template<typename result_t , typename... arguments_t>
const std::vector< function_t > & xtd::delegate< result_t(arguments_t...)>::functions ( ) const
inline

Gets the delegates array.

Returns
The delegates array.

◆ is_empty()

template<typename result_t , typename... arguments_t>
bool xtd::delegate< result_t(arguments_t...)>::is_empty ( ) const
inlinenoexcept

Return if the delegate is empty.

Returns
bool Return true if delegate is empty; otherwise false.

◆ size()

template<typename result_t , typename... arguments_t>
size_t xtd::delegate< result_t(arguments_t...)>::size ( ) const
inlinenoexcept

Return the size of invocation list.

Returns
Return the size of invocation list.

◆ begin_invoke() [1/3]

template<typename result_t , typename... arguments_t>
async_result xtd::delegate< result_t(arguments_t...)>::begin_invoke ( arguments_t...  arguments)

Executes the method represented by the current delegate asynchronously on the thread that the control's underlying handle was created on.

Parameters
async_callbackThe asynchronous callback that will be called at the end of the invocation.
async_stateThe asynchronous state associated with the invocation.
argumentsThe parameter list.
Returns
An async_result_invoke that represents the result of the begin_invoke operation.
Examples
The following examples shows hot tu use xtd::delegate::begin_invoke, xtd::delegate::end_invoke, xtd::delegate::invoke methods.
#include <xtd/threading/thread>
#include <xtd/console>
#include <xtd/delegate>
using namespace xtd;
using namespace xtd::threading;
auto main() -> int {
auto d1 = delegate<int(string)> {[](string name) -> int {
console::write_line("(Thread {}) Hello {}!", thread::current_thread().managed_thread_id(), name);
return name == "xtd" ? 42 : 24;
}};
auto result = d1.begin_invoke("Gammasoft");
console::write_line("return = {}", d1.invoke("xtd"));
console::write_line("return = {}", d1.end_invoke(result));
}
// This code produces the following output :
//
// (Thread 1) Hello xtd!
// return = 42
// (Thread 4) Hello Gammasoft!
// return = 24
@ d1
The 1 key.
The xtd::threading namespace provides classes and interfaces that enable multithreaded programming....
Definition abandoned_mutex_exception.hpp:11

◆ begin_invoke() [2/3]

template<typename result_t , typename... arguments_t>
async_result xtd::delegate< result_t(arguments_t...)>::begin_invoke ( xtd::async_callback  async_callback,
arguments_t...  arguments 
)

Executes the method represented by the current delegate asynchronously on the thread that the control's underlying handle was created on.

Parameters
async_callbackThe asynchronous callback that will be called at the end of the invocation.
argumentsThe parameter list.
Returns
An async_result_invoke that represents the result of the begin_invoke operation.
Examples
The following examples shows hot tu use xtd::delegate::begin_invoke, xtd::delegate::end_invoke, xtd::delegate::invoke methods.
#include <xtd/threading/thread>
#include <xtd/console>
#include <xtd/delegate>
using namespace xtd;
using namespace xtd::threading;
auto main() -> int {
auto d1 = delegate<int(string)> {[](string name) -> int {
console::write_line("(Thread {}) Hello {}!", thread::current_thread().managed_thread_id(), name);
return name == "xtd" ? 42 : 24;
}};
auto result = d1.begin_invoke("Gammasoft");
console::write_line("return = {}", d1.invoke("xtd"));
console::write_line("return = {}", d1.end_invoke(result));
}
// This code produces the following output :
//
// (Thread 1) Hello xtd!
// return = 42
// (Thread 4) Hello Gammasoft!
// return = 24

◆ begin_invoke() [3/3]

template<typename result_t , typename... arguments_t>
async_result xtd::delegate< result_t(arguments_t...)>::begin_invoke ( xtd::async_callback  async_callback,
std::any  async_state,
arguments_t...  arguments 
)

Executes the method represented by the current delegate asynchronously on the thread that the control's underlying handle was created on.

Parameters
argumentsThe parameter list.
Returns
An async_result_invoke that represents the result of the begin_invoke operation.
Examples
The following examples shows hot tu use xtd::delegate::begin_invoke, xtd::delegate::end_invoke, xtd::delegate::invoke methods.
#include <xtd/threading/thread>
#include <xtd/console>
#include <xtd/delegate>
using namespace xtd;
using namespace xtd::threading;
auto main() -> int {
auto d1 = delegate<int(string)> {[](string name) -> int {
console::write_line("(Thread {}) Hello {}!", thread::current_thread().managed_thread_id(), name);
return name == "xtd" ? 42 : 24;
}};
auto result = d1.begin_invoke("Gammasoft");
console::write_line("return = {}", d1.invoke("xtd"));
console::write_line("return = {}", d1.end_invoke(result));
}
// This code produces the following output :
//
// (Thread 1) Hello xtd!
// return = 42
// (Thread 4) Hello Gammasoft!
// return = 24

◆ end_invoke()

template<typename result_t , typename... arguments_t>
result_t xtd::delegate< result_t(arguments_t...)>::end_invoke ( async_result  async)

Retrieves the return value of the asynchronous operation represented by the async_result_invoke passed.

Parameters
asyncThe async_result_invoke that represents a specific invoke asynchronous operation, returned when calling begin_invoke.
Examples
The following examples shows hot tu use xtd::delegate::begin_invoke, xtd::delegate::end_invoke, xtd::delegate::invoke methods.
#include <xtd/threading/thread>
#include <xtd/console>
#include <xtd/delegate>
using namespace xtd;
using namespace xtd::threading;
auto main() -> int {
auto d1 = delegate<int(string)> {[](string name) -> int {
console::write_line("(Thread {}) Hello {}!", thread::current_thread().managed_thread_id(), name);
return name == "xtd" ? 42 : 24;
}};
auto result = d1.begin_invoke("Gammasoft");
console::write_line("return = {}", d1.invoke("xtd"));
console::write_line("return = {}", d1.end_invoke(result));
}
// This code produces the following output :
//
// (Thread 1) Hello xtd!
// return = 42
// (Thread 4) Hello Gammasoft!
// return = 24

◆ invoke()

template<typename result_t , typename... arguments_t>
result_t xtd::delegate< result_t(arguments_t...)>::invoke ( arguments_t...  arguments) const
inline

invokes the method represented by the current delegate.

Parameters
argumentsThe parameter list.
Returns
result_t The return value.
Examples
The following examples shows hot tu use xtd::delegate::begin_invoke, xtd::delegate::end_invoke, xtd::delegate::invoke methods.
#include <xtd/threading/thread>
#include <xtd/console>
#include <xtd/delegate>
using namespace xtd;
using namespace xtd::threading;
auto main() -> int {
auto d1 = delegate<int(string)> {[](string name) -> int {
console::write_line("(Thread {}) Hello {}!", thread::current_thread().managed_thread_id(), name);
return name == "xtd" ? 42 : 24;
}};
auto result = d1.begin_invoke("Gammasoft");
console::write_line("return = {}", d1.invoke("xtd"));
console::write_line("return = {}", d1.end_invoke(result));
}
// This code produces the following output :
//
// (Thread 1) Hello xtd!
// return = 42
// (Thread 4) Hello Gammasoft!
// return = 24

◆ equals() [1/3]

template<typename result_t , typename... arguments_t>
bool xtd::delegate< result_t(arguments_t...)>::equals ( const delegate< result_t(arguments_t...)> &  delegate) const
inlineoverridenoexcept

Determines whether this instance and another specified delegateType object have the same value.

Parameters
valueThe delegateType to compare.
Returns
bool true if the value of this instance is the same as the value of value; otherwise, false.

◆ combine() [1/2]

template<typename result_t , typename... arguments_t>
static delegate xtd::delegate< result_t(arguments_t...)>::combine ( const std::vector< delegate< result_t(arguments_t...)> > &  delegates)
inlinestaticnoexcept

Concatenates the invocation lists of an array of delegates.

Parameters
delegatesThe array of delegates to combine.
Returns
Delegate A new delegate with an invocation list that concatenates the invocation lists of the delegates in the delegates array. Returns null if delegates is null, if delegates contains zero elements, || if every entry in delegates is null.
Remarks
If the delegates array contains entries that are null, those entries are ignored.
The invocation list can contain duplicate entries; that is, entries that refer to the same method on the same object.

◆ combine() [2/2]

template<typename result_t , typename... arguments_t>
static delegate xtd::delegate< result_t(arguments_t...)>::combine ( const delegate< result_t(arguments_t...)> &  a,
const delegate< result_t(arguments_t...)> &  b 
)
inlinestaticnoexcept

Concatenates the invocation lists of two delegates.

Parameters
aThe delegate whose invocation list comes first.
bThe delegate whose invocation list comes second.
Returns
delegateType A new delegate with an invocation list that concatenates the invocation lists of a and b in that order. Returns a if b is null, returns b if a is a null reference, and returns a null reference if both a and b are null references.
Remarks
The invocation list can contain duplicate entries; that is, entries that refer to the same method on the same object.

◆ remove()

template<typename result_t , typename... arguments_t>
static delegate xtd::delegate< result_t(arguments_t...)>::remove ( const delegate< result_t(arguments_t...)> &  source,
const delegate< result_t(arguments_t...)> &  value 
)
inlinestaticnoexcept

removes the last occurrence of the invocation list of a delegate from the invocation list of another delegate.

Parameters
sourceThe delegate from which to remove the invocation list of value.
valueThe delegate that supplies the invocation list to remove from the invocation list of source.
Returns
delegate A new delegate with an invocation list formed by taking the invocation list of source and removing the last occurrence of the invocation list of value, if the invocation list of value is found within the invocation list of source. Returns source if value is null || if the invocation list of value is ! found within the invocation list of source. Returns a null reference if the invocation list of value is equal to the invocation list of source || if source is a null reference.
Remarks
If the invocation list of value matches a contiguous set of elements in the invocation list of source, then the invocation list of value is said to occur within the invocation list of source. If the invocation list of value occurs more than once in the invocation list of source, the last occurrence is removed.

◆ remove_all()

template<typename result_t , typename... arguments_t>
static delegate xtd::delegate< result_t(arguments_t...)>::remove_all ( const delegate< result_t(arguments_t...)> &  source,
const delegate< result_t(arguments_t...)> &  value 
)
inlinestaticnoexcept

removes all occurrences of the invocation list of a delegate from the invocation list of another delegate.

Parameters
sourceThe delegate from which to remove the invocation list of value.
valueThe delegate that supplies the invocation list to remove from the invocation list of source.
Returns
delegate A new delegate with an invocation list formed by taking the invocation list of source && removing all occurrences of the invocation list of value, if the invocation list of value is found within the invocation list of source. Returns source if value is null || if the invocation list of value is ! found within the invocation list of source. Returns a null reference if the invocation list of value is equal to the invocation list of source, if source contains only a series of invocation lists that are equal to the invocation list of value, || if source is a null reference.
Remarks
If the invocation list of value matches a contiguous set of elements in the invocation list of source, then the invocation list of value is said to occur within the invocation list of source. If the invocation list of value occurs more than once in the invocation list of source, all occurrences are removed.

◆ operator()()

template<typename result_t , typename... arguments_t>
result_t xtd::delegate< result_t(arguments_t...)>::operator() ( arguments_t...  arguments) const
inline

invokes the method represented by the current delegate.

Parameters
argumentsThe parameter list.
Returns
result_t The return value.

◆ equals() [2/3]

template<typename result_t , typename... arguments_t>
virtual bool xtd::object::equals ( const object obj) const
virtualnoexcept

Determines whether the specified object is equal to the current object.

Parameters
objThe object to compare with the current object.
Returns
true if the specified object is equal to the current object. otherwise, false.
Examples
The following code example compares the current instance with another object.
#include <xtd/console>
using namespace xtd;
auto main() -> int {
auto object1 = new_ptr<object>();
auto object2 = new_ptr<object>();
auto object3 = object2;
console::write_line(object1->equals(*object3));
console::write_line(*object1 == *object3);
object3 = object1;
console::write_line(object1->equals(*object3));
console::write_line(*object1 == *object3);
}
// This code produces the following output :
//
// false
// false
// true
// true

Reimplemented from xtd::object.

◆ equals() [3/3]

template<typename result_t , typename... arguments_t>
template<typename object_a_t , typename object_b_t >
static bool xtd::object::equals ( const object_a_t &  object_a,
const object_b_t &  object_b 
)
inlinestaticnoexcept

Determines whether the specified object instances are considered equal.

Parameters
object_aThe first object to compare.
object_bThe second object to compare.
Returns
true if object_a is the same instance as object_b or if both are null references or if object_a(object_b) returns true. otherwise, false.
Examples
The following code example compares different objects.
#include <xtd/console>
using namespace xtd;
auto main() -> int {
string s1 = "Tom";
string s2 = "Carol";
console::write_line("object::equals(\"{0}\", \"{1}\") => {2}", s1, s2, object::equals(s1, s2));
s1 = "Tom";
s2 = "Tom";
console::write_line("object::equals(\"{0}\", \"{1}\") => {2}", s1, s2, object::equals(s1, s2));
s1 = "";
s2 = "Tom";
console::write_line("object::equals(\"{0}\", \"{1}\") => {2}", s1, s2, object::equals(s1, s2));
s1 = "Carol";
s2 = "";
console::write_line("object::equals(\"{0}\", \"{1}\") => {2}", s1, s2, object::equals(s1, s2));
s1 = "";
s2 = "";
console::write_line("object::equals(\"{0}\", \"{1}\") => {2}", s1, s2, object::equals(s1, s2));
}
// This code produces the following output :
//
// object::equals("Tom", "Carol") => false
// object::equals("Tom", "Tom") => true
// object::equals("", "Tom") => false
// object::equals("Carol", "") => false
// object::equals("", "") => true
virtual bool equals(const object &obj) const noexcept
Determines whether the specified object is equal to the current object.

The documentation for this class was generated from the following file: