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)