On Monday, 26 October 2020 at 00:56:26 UTC, frame wrote:

I see that your approach can handle functions and delegates but isn't that not equivalent like this template for a function?

auto myStuff(T)(T function() fn) {
    try {
        return fn();
    }
    catch (Exception e) {
        //
    }
}

You cannot pass a delegate to something that expects a function pointer.

I wonder if I could use such a template as static variant and the compiler just expands the code? Just thinking that using a function or delegate is an overhead. Maybe not a function but a delegate will allocate GC memory I think.

If you pass the delegate as a template parameter/alias parameter, it's more likely to be inlined:

auto myStuff(alias fn)() {
    try return fn();
    catch (Exception e) { }
}

myStuff!( { /* some code */ } );

--
/Jacob Carlborg


Reply via email to