Local static class fields
Bert
Bert at gmail.com
Mon Aug 12 22:48:43 UTC 2019
Making a field static is effectively a global variable to the
class.
I have a recursive class structure(think of a graph or tree) and
I need to keep a global state for it, but this state actually
needs to be different for each tree object. The reason for this
is that structurally it will not change per tree and if it it is
not static then it wastes space unnecessarily.
class X
{
X[] x;
static State s;
}
making s non-static has the problem that every X will allocate
storage for s wasting space since for any instance chain of X's
they will all have the same s. Making it static though then makes
it the same for all instance chain's of X, of which it should be
local to each.
One way around this is to use an dictionary that associates each
state to each instance chain.
That is there is a initial X that is the parent of the chain and
we can then associate a state to it's address, any other chain
will have a different initial X and so we can get a new state.
class X
{
X[] x;
static State[X] s;
}
This is not a huge difficulty to do but does require finding the
initial X to use, which is not difficult but wastes cycles for
large chains. There will, of course, be a constructor that
constructs a chain and creates a new state for it and updates s.
Is there any way to do this more naturally in D?
More information about the Digitalmars-d-learn
mailing list