Run-time initialised static variables
dekevin
dekeyser.kevin97 at gmail.com
Sat Feb 10 02:35:28 UTC 2018
On Tuesday, 6 February 2018 at 23:03:07 UTC, dekevin wrote:
> Hello everyone,
> I just ran into the problem, that I need a static variable,
> where the initialisation code for that variable is only
> accessible during run-time (since part of the initialisation
> code will be dynamically linked).
>
> Is there a way to do this in D?
>
> To be a bit more concrete, this is where I have the problem
> (where ℚ uses GMP, which is dynamically linked):
>
> struct ℚInf {
> ℚ qval;
> immutable static ℚInf zero = ℚInf(0,1);
> this(long num, long den) {
> qval = ℚ(num,den); //this initialisation requires
> dynamically linked code
> }
> }
In case anyone is curios, thanks to tgehr i was able to resolve
the issue.
For static variables:
struct ℚInf {
ℚ qval;
static ℚInf zero = void;
static this() {
zero = ℚInf(0,1);
}
}
For immutable static variables (a bit hacky since it sidesteps
the type system):
struct ℚInf {
ℚ qval;
immutable static ℚInf zero = void;
static this() @trusted {
import std.conv: emplace;
emplace!ℚInf(cast(ℚInf*)&zero,ℚInf(0,1));
}
}
More information about the Digitalmars-d-learn
mailing list