How to partially apply member functions?

ct via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jun 30 01:43:32 PDT 2017


On Thursday, 29 June 2017 at 14:30:19 UTC, Andrea Fontana wrote:
> On Thursday, 29 June 2017 at 13:01:10 UTC, ct wrote:
>> I was only able to do it this way:
>>
>>     auto on_next_previous = &this.OnNextPreviousMatch;
>>     entry_.addOnNextMatch(&partial!(on_next_previous, true));
>>     entry_.addOnPreviousMatch(&partial!(on_next_previous, 
>> false));
>
> I think you should provide a better example in order to get 
> some help.
> We neither know what argument .addOnNextMatch() expects.
>
> Usually a full example on https://dpaste.dzfl.pl or other 
> websites is more useful :)
>
> Andrea

Sorry. Please check this DPaste: 
https://dpaste.dzfl.pl/6379944510b8

addOnNextMatch() is gtk.SearchEntry.addOnNextMatch() 
[https://api.gtkd.org/gtkd/gtk/SearchEntry.html] which has the 
signature:

gulong addOnNextMatch (void delegate(SearchEntry) dlg, 
ConnectFlags connectFlags = cast(ConnectFlags)0);

So basically, it needs a

void delegate(SearchEntry)

as an argument.

I wanted to create a single callback member function to handle 
both addOnNextMatch() and addOnPreviousMatch() by binding a bool 
value (true for next_match, false for previous_match) so that the 
callback knows which case it is handling.

It compiled when I wrote:

auto on_next_previous = &this.OnNextPreviousMatch;
entry_.addOnNextMatch(&partial!(on_next_previous, true));
entry_.addOnPreviousMatch(&partial!(on_next_previous, false));

But not when I wrote:

entry_.addOnNextMatch(partial!(&this.OnNextPreviousMatch, true));

Or

entry_.addOnNextMatch(partial!(&Editor.OnNextPreviousMatch, 
true));

Error: value of 'this' is not known at compile time




More information about the Digitalmars-d-learn mailing list