On 2018-05-24 08:05, Robert M. Münch wrote:

Hi, great! Thanks for the examples... BTW: Is there a place where such generic and fundamental examples are collected?

Not as far as I know.

void handleException1(alias dg)()
{
     try dg();
     catch (Exception e) { /* handle exception */ }
}

void handleException2(lazy void dg)
{
     try dg();
     catch (Exception e) { /* handle exception */ }
}

void handleException3(scope void delegate () dg)
{
     try dg();
     catch (Exception e) { /* handle exception */ }
}

void main()
{
     handleException1!({
         writeln("asd");
     });

     handleException1!(() => writeln("asd"));

     handleException2(writeln("asd"));

     handleException3({
         writeln("asd");
     });
}

What is exactly the difference between handleException1 and 3?

With handleException1 the delegate needs to be passed as a template argument, in the other case as a regular argument. I thought that the lambda syntax, () => writeln("asd"), did not work as a regular argument, but I checked now and it does.

Passing it as a template argument might allow the compiler to inline it. All range functions in Phobos are using template argument approach.

--
/Jacob Carlborg

Reply via email to