On Tuesday, February 06, 2018 23:03:07 dekevin via Digitalmars-d-learn 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 > } > }
So, you want qval to be static and initialized at runtime? Then use a static constructor. e.g. struct QInf { ... static this() { qval = ...; } ... } That doesn't work if you're dealing with a static local variable, but it works for static members of structs and classes, and it works for module-level variables. And if you want to make qval immutable, then use a shared static constructor. e.g. struct QInf { ... shared static this() { qval = ...; } ... } You can currently initialize immutable static variables with non-shared static constructors, but that's a bug and will result in the immutable variable being reinitialized whenever a new thread is created. - Jonathan M Davis