Equivalent of C++ std::function

Mike Parker via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jun 24 18:47:31 PDT 2014


On 6/25/2014 10:45 AM, Mike Parker wrote:
> On 6/25/2014 10:10 AM, Yuushi wrote:
>> I was wondering if D had something akin to std::function in C++.
>>
>> Say I have some functions in an associative array, for example:
>>
>>       auto mapping = ['!' : (string a) => toUpper!string(a), '^' :
>> (string a) => capitalize!string(a)];
>>
>> What I want to do is basically declare something like:
>>
>>      function string(string) transform;
>>      if(<some condition>) {
>>           transform = mapping[<lookup>];
>>      }
>>
>> In C++, this could be done by declaring:
>>
>>       std::function<string(string)> transform;
>>
>> Is there an equivalent D construct for this?
>
> For function pointers (free functions or static class functions):
>
> alias TransformFunc = string function( string );
> TransformFunc transform;
>
> if( foo ) transform = &func;
>
> For delegates (lambdas or pointers to class methods or inner functions):
>
> alias TransformDg = string delegate( string );
> TransformDG transform;
>
> if( foo ) transform = &bar.method;
>

And in this case you want the latter:

TransformDg transform = mapping[ '!' ];


---
This email is free from viruses and malware because avast! Antivirus protection is active.
http://www.avast.com



More information about the Digitalmars-d-learn mailing list