On Monday, 2 May 2016 at 13:22:01 UTC, Basile B wrote:
On Monday, 2 May 2016 at 13:00:27 UTC, Erik Smith wrote:
Is there a way to initialize a static array and have it's size
inferred (and that works for arrays of structs using braced
literals)? This would make it easier to maintain longer
static array definitions. The code below doesn't work when
removing the array size even though the array is declared as
static immutable.
import std.traits;
static immutable int[] a = [1,2,3];
static assert(isStaticArray!(typeof(a))); // fails
Help yourself with a template:
----
import std.traits;
auto toStaticArray(alias array)()
if (isArray!(typeof(array)))
{
enum size = array.length;
alias T = typeof(array.init[0])[size];
T result = array[0..size];
return result;
}
enum a = toStaticArray!([1,2,3]);
static assert(isStaticArray!(typeof(a))); // success
----
Does it fit ?
Using an enum is probably a bit better
----
auto toStaticArray(alias array)()
if (isDynamicArray!(typeof(array)) && array.length)
{
alias T = typeof(array[0])[array.length];
enum T result = array[0..array.length];
return result;
}