www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Mutable array with fixed length

reply "Freddy" <Hexagonalstar64 gmail.com> writes:
How would you create a mutable array with a fixed(compile error
when trying to change) length.
Sep 04 2014
parent Jonathan M Davis via Digitalmars-d-learn writes:
On Fri, 05 Sep 2014 00:26:07 +0000
Freddy via Digitalmars-d-learn <digitalmars-d-learn puremagic.com>
wrote:

 How would you create a mutable array with a fixed(compile error
 when trying to change) length.
Static arrays have a fixed length and live on the stack. int[12] arr; Dynamic arrays have a mutable length and the memory that they refer to normally lives on the heap (though they can be slices of static arrays or any two pointers). int[] arr = new int[](12); If the array is fully const or immutable immutable(int[]) arr = new immutable(int[])(12); then its length can't be mutated, whereas if the elements are const or immutable but the array is not const(int)[] = new const(int)[](12); then the length can mutated but the elements cannot be. However, because const and immutable are transitive, there is no way to have an array whose elements are mutable but have the array itself (and thus its length) be const or immutable. So, to get what you want, you're probably going to have to create a wrapper struct that forwards all of the operations that you want and doesn't expose the ones you don't (e.g. length). - Jonathan M Davis
Sep 04 2014