digitalmars.D - Automatic static array length
- Your Name (10/10) Dec 26 2018 Is there a way to declare a static array with an automatic
- Steven Schveighoffer (8/22) Dec 26 2018 Just added recently:
- Your Name (3/4) Dec 26 2018 How does this work?
- Steven Schveighoffer (5/9) Dec 26 2018 It creates a static array from the given data, using the compiler's IFTI...
- Steven Schveighoffer (3/5) Dec 26 2018 https://github.com/dlang/phobos/pull/6817
- Adam D. Ruppe (19/21) Dec 26 2018 Yes, there is a library function from std.array:
- Walter Bright (6/8) Dec 29 2018 This does not work due to the circular reference:
Is there a way to declare a static array with an automatic length, so that it doesn't have to be manually calculated? Perhaps something like this: int[auto] arr = [12, 23, 54, 653, 2, 6432, 345, 435, 26]; the current way to do it is this: int[9] arr = [12, 23, 54, 653, 2, 6432, 345, 435, 26]; But then you have to manually count the items, and update the number each time the array is changed. Is there any way to declare a static array with an automatically inferred length?
Dec 26 2018
On 12/26/18 5:23 PM, Your Name wrote:Is there a way to declare a static array with an automatic length, so that it doesn't have to be manually calculated? Perhaps something like this: int[auto] arr = [12, 23, 54, 653, 2, 6432, 345, 435, 26]; the current way to do it is this: int[9] arr = [12, 23, 54, 653, 2, 6432, 345, 435, 26]; But then you have to manually count the items, and update the number each time the array is changed. Is there any way to declare a static array with an automatically inferred length?Just added recently: https://dlang.org/phobos/std_array.html#.staticArray i.e.: auto arr = [12, 23, 54, 653, 2, 6432, 345, 435, 26].staticArray; Hm... noticed just now the table at the top of that page doesn't have staticArray listed. -Steve
Dec 26 2018
On Wednesday, 26 December 2018 at 22:34:02 UTC, Steven Schveighoffer wrote:auto arr = [12, 23, 54, 653, 2, 6432, 345, 435, 26].staticArray;How does this work?
Dec 26 2018
On 12/26/18 5:37 PM, Your Name wrote:On Wednesday, 26 December 2018 at 22:34:02 UTC, Steven Schveighoffer wrote:It creates a static array from the given data, using the compiler's IFTI engine to infer the length. And no allocations should happen. -Steveauto arr = [12, 23, 54, 653, 2, 6432, 345, 435, 26].staticArray;How does this work?
Dec 26 2018
On 12/26/18 5:34 PM, Steven Schveighoffer wrote:Hm... noticed just now the table at the top of that page doesn't have staticArray listed.https://github.com/dlang/phobos/pull/6817 -Steve
Dec 26 2018
On Wednesday, 26 December 2018 at 22:23:02 UTC, Your Name wrote:Is there a way to declare a static array with an automatic length, so that it doesn't have to be manually calculated?Yes, there is a library function from std.array: http://dpldocs.info/experimental-docs/std.array.staticArray.1.html --- import std.array; auto a = [0, 1].staticArray; // usage here, note auto static assert(is(typeof(a) == int[2])); assert(a == [0, 1]); --- Though, if you want static allocation but not necessarily static type, you can also just use... the static keyword! static int[] a = [1, 2, 3]; That would be typed int[], of course, but it would have size 3 there and would be in a statically allocated block (which also means btw the array is evaluated at compile time, and thus subject to those rules). So depends on exactly what you need, I'm guessing that lib function is it, but you should consider the static keyword option too as it is a good pattern to know anyway.
Dec 26 2018
On 12/26/2018 2:23 PM, Your Name wrote:Is there a way to declare a static array with an automatic length, so that it doesn't have to be manually calculated?This does not work due to the circular reference: int[arr.length] arr = [1,2,3]; This works: enum array = [1,2,3]; int[array.length] arr = array;
Dec 29 2018