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