|
|
@@ -39,7 +39,7 @@ lightweight classes to solve the same and many other problems.
|
|
|
# Delegate
|
|
|
|
|
|
A delegate can be used as a general purpose invoker with no memory overhead for
|
|
|
-free functions and member functions provided along with an instance on which to
|
|
|
+free functions, lambdas and members provided along with an instance on which to
|
|
|
invoke them.<br/>
|
|
|
It doesn't claim to be a drop-in replacement for an `std::function`, so don't
|
|
|
expect to use it whenever an `std::function` fits well. That said, it's most
|
|
|
@@ -93,9 +93,9 @@ delegate.connect<&g>(c);
|
|
|
delegate(42);
|
|
|
```
|
|
|
|
|
|
-The function `g` is invoked with a reference to `c` and `42`. However, the
|
|
|
-function type of the delegate is still `void(int)`. This is also the signature
|
|
|
-of its function call operator.<br/>
|
|
|
+Function `g` is invoked with a reference to `c` and `42`. However, the function
|
|
|
+type of the delegate is still `void(int)`. This is also the signature of its
|
|
|
+function call operator.<br/>
|
|
|
Another interesting aspect of the delegate class is that it accepts functions
|
|
|
with a list of parameters that is shorter than that of its function type:
|
|
|
|
|
|
@@ -106,9 +106,15 @@ delegate(42);
|
|
|
```
|
|
|
|
|
|
Where the function type of the delegate is `void(int)` as above. It goes without
|
|
|
-saying that the extra arguments are silently discarded internally.<br/>
|
|
|
-This is a nice-to-have feature in a lot of cases, as an example when the
|
|
|
-`delegate` class is used as a building block of a signal-slot system.
|
|
|
+saying that the extra arguments are silently discarded internally. This is a
|
|
|
+nice-to-have feature in a lot of cases, as an example when the `delegate` class
|
|
|
+is used as a building block of a signal-slot system.<br/>
|
|
|
+In fact, this filtering works both ways. The class tries to pass its first
|
|
|
+_count_ arguments **first**, then the last _count_. Watch out for conversion
|
|
|
+rules if in doubt when connecting a listener!<br/>
|
|
|
+Arbitrary functions that pull random arguments from the delegate list aren't
|
|
|
+supported instead. Other feature were preferred, such as support for functions
|
|
|
+with compatible argument lists although not equal to those of the delegate.
|
|
|
|
|
|
To create and initialize a delegate at once, there are a few specialized
|
|
|
constructors. Because of the rules of the language, the listener is provided by
|