Реализация контейнера типа std :: array с C ++ 11 initializer_list

Единственное и мне очень неудобное предостережение для std :: array заключается в том, что он не может определить его размер из списка инициализаторов, как встроенные массивы C, это размер должен быть передан как шаблон.

Можно ли реализовать контейнер, похожий на std :: array (тонкую оболочку вокруг встроенного массива C) с C ++ 11 initializer_list?

Я спрашиваю, потому что, в отличие от std :: array, он автоматически выводит размер массива из списка инициализаторов, что намного удобнее. Например:

// il_array is the hypothetical container
// automatically deduces its size from the initalizer list 
il_array <int> myarr = {2, 4, 6, 7, 8}; 

Мы также хотели бы предоставить конструктор для определения размера, если список инициализаторов не был предоставлен. Например:

// construct a fixed size array of size 10
il_array <int> myarr2 (10); 

Это также сделало бы контейнер более совместимым с другими стандартными контейнерами, например vector, deque и list.

Насколько мне известно, это невозможно, поскольку обернутый C-массив, например Элемент [size] должен иметь постоянный размер, а функция-член size () initializer_list не является постоянной.

Кроме того, мне было интересно, можно ли реализовать такой контейнер, используя вариативный шаблон, хотя из того, что я читал, я не думаю, что это возможно.

8
задан Deduplicator 27 February 2015 в 16:30
поделиться