On Tuesday, 12 January 2016 at 17:03:49 UTC, Ali Çehreli wrote:
On 01/12/2016 08:55 AM, ParticlePeter wrote:

> I have a function "otherFunc" which takes a function with
lots of
> parameters as argument:
>
> void otherFunc( void function( ref int p1, float p2, ubyte
p3, ... ) mf );

Ok.

> otherFunc( void function( ref int p1, float p2, ubyte p3 ) {
myCode; } );

Ok.

> alias MF = void function( ref int p1, float p2, ubyte p3 );

Ok.

> I can rewrite the definition of otherFunc like this:
> void otherFunc( MF mf );

That has the same problem of trying to do this for int:

void foo(int i) {
}

void main() {
    foo(int 42);     // <-- ERROR
}

But you can do this:

    foo(int(42));    // (Relatively new syntax in D.)

> But I cannot pass an anonymous function to otherFunc like
this:
> otherFunc( MF { myCode; } );

It works with the parentheses as it does for int:

alias MF = void function( ref int p1, float p2, ubyte p3 );

void otherFunc( MF mf ) {
}

void main() {
    otherFunc(MF((ref int, float, ubyte){ }));    // <-- Parens
}

O.K. so I conclude that writing:
void main() {
    otherFunc(MF { });
}

is not possible. At least not with alias, maybe with templates or mixins?
In essence something like C #define as in:

#define MF function( ref int p1, float p2, ubyte p3 )

Is there some such way?



Reply via email to