On Friday, 17 November 2017 at 06:21:50 UTC, Jerry A. wrote:
On Friday, 17 November 2017 at 05:08:23 UTC, pham wrote:
struct DelegateList(Args...)
{
public:
    alias DelegateHandler = void delegate(Args args) nothrow;

    DelegateHandler[] items;

    void opCall(Args args) nothrow
    {
        foreach (i; items)
            i(args);
    }
}

DelegateList!(string, int) list; // Compile OK so far
DelegateList!(string, int*) list2; // Compile OK so far
DelegateList!(string, ref int) list3; // Compile error -> How to make it work?

Thanks
Pham

The only way I know of is using a template which behaves like a reference. Which can be done with nullableRef I suppose. Haven't actually tried it.

import std.typecons : NullableRef, nullableRef;

DelegateList!(NullableRef!int)(nullableRef(some_int));

nullableRef is same as passing pointer. Using "ref" is stronger guarantee that the var is never be passed as null.

variadic parameter passed by "ref" should be supported

Thanks.
Pham


Reply via email to