On Tuesday, 24 December 2019 at 07:37:02 UTC, Rumbu wrote:
I am trying to create an array of functions inside a struct.

struct S {
  void f1() {}
  void f2() {}

  alias Func = void function();

 immutable Func[2] = [&f1, &f2]

}

What I got: Error: non-constant expression '&f1'

Tried also with delegates (since I am in a struct context but I got: no `this` to create delegate `f1`.

So, is there any way to have an array of functions without adding them at runtime?

You can set funcs within the constructor but not as a default initializer because they have to be compile time constants (https://dlang.org/spec/struct.html#default_struct_init)

struct S
{
    void f1() {}
    void f2() {}

    alias Func = void delegate();

    immutable Func[2] funcs;

    this(bool)
    {
        funcs = [&f1, &f2];
    }
}

&f1 creates a delegate which contain a function pointer and the context pointer (struct, closure, ...). In this example the latter contains a pointer to a concrete instance of S which is a usually a runtime value. (https://dlang.org/spec/type.html#delegates)

Reply via email to