Re: Equivalent of C++ std::function

2014-06-25 Thread Yuushi via Digitalmars-d-learn

On Wednesday, 25 June 2014 at 05:13:00 UTC, Olivier Pisano wrote:

On Wednesday, 25 June 2014 at 03:33:15 UTC, Yuushi wrote:


Thanks a ton - I guess I need to do a fair bit more reading 
about alias.


In this case, alias acts as typedef in C++. What is important 
here is the function pointers/delegates syntax.


Yeah, I realised that when I went back and looked at what I'd 
tried:


 function string(string) transform;

which should have been:

string function(string) transform;

which does work.

Thanks for the clarification.







Re: Equivalent of C++ std::function

2014-06-25 Thread Ali Çehreli via Digitalmars-d-learn

On 06/24/2014 08:33 PM, Yuushi wrote:

 I guess I need to do a fair bit more reading about alias.

It is probably too basic for you but somebody else may find it useful:

 http://ddili.org/ders/d.en/lambda.html

Ali



Re: Equivalent of C++ std::function

2014-06-25 Thread Ali Çehreli via Digitalmars-d-learn

On 06/24/2014 11:23 PM, Yuushi wrote:

 Yeah, I realised that when I went back and looked at what I'd tried:

   function string(string) transform;

That gets me all the time! :-/ That is the long version of the function 
literal syntax:


auto f = function string(string s) { return hello; };


 which should have been:

  string function(string) transform;

 which does work.

 Thanks for the clarification.

Ali



Re: Equivalent of C++ std::function

2014-06-24 Thread Mike Parker via Digitalmars-d-learn

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::functionstring(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;

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



Re: Equivalent of C++ std::function

2014-06-24 Thread Yuushi via Digitalmars-d-learn

On Wednesday, 25 June 2014 at 01:47:13 UTC, Mike Parker wrote:

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::functionstring(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


Thanks a ton - I guess I need to do a fair bit more reading about 
alias.


Re: Equivalent of C++ std::function

2014-06-24 Thread Olivier Pisano via Digitalmars-d-learn

On Wednesday, 25 June 2014 at 03:33:15 UTC, Yuushi wrote:


Thanks a ton - I guess I need to do a fair bit more reading 
about alias.


In this case, alias acts as typedef in C++. What is important 
here is the function pointers/delegates syntax.