Единственное и мне очень неудобное предостережение для 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 не является постоянной.
Кроме того, мне было интересно, можно ли реализовать такой контейнер, используя вариативный шаблон, хотя из того, что я читал, я не думаю, что это возможно.