Browse Source

doc: delegate

Michele Caini 3 years ago
parent
commit
0bf0a0a8fa
1 changed files with 13 additions and 7 deletions
  1. 13 7
      docs/md/signal.md

+ 13 - 7
docs/md/signal.md

@@ -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