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