Один из способов реализовать конструктор - это:
this(int x, int y)
{
auto i2 = cast(int[2]*)&ints;
*i2 = [x, y];
}
const только для чтения, поэтому конструктор создает изменяемое представление i2
и присваивает ему. Мне действительно не нравится приведение в первой строке, возможно, в std lib есть какая-то функция, которая инкапсулирует приведение и удаляет модификатор const из типа переменной, так что это можно выразить в безопасной и идиоматической форме.
Второй способ - сделать ints
изменяемым и приватным, а затем предоставить общедоступную функцию доступа:
struct Foo {
private int[2] _ints;
this(int x, int y) {
_ints = [x, y];
}
@property ref const(int)[2] ints () {
return _ints;
}
}
Компилятор может включить его.