how to initialize immutable 2 dim array
Stewart Gordon
smjg_1998 at yahoo.com
Sun Oct 31 10:46:29 PDT 2010
On 31/10/2010 17:10, Michal Minich wrote:
> I have global static array and I want it to initialize in module
> constructor, but I get error. I there way to do it without using enum.
So you want to initialise it with data acquired at runtime, but make it
immutable once initialised?
> immutable int[5][5] arr;
>
> static this () {
> arr = new int[5][5]; // Error: slice arr[] is not mutable
> }
You have a more fundamental problem here. arr is a static array, so you
can't reference-assign it.
Best you can do is to either:
- initialise it statically, using CTFE or template metaprogramming to do
the calculations, if they don't depend on getting external data
- use a dynamic array instead, and use .idup to populate it
- create a mutable pointer to it in the module constructor
int[5][5]* marr = cast(int[5][5]*) arr;
and use that to populate the array. But I'm not sure whether this leads
to UB, and I still wish the means of casting away const or immutable
were explicit.
Stewart.
More information about the Digitalmars-d-learn
mailing list