Код: Выделить всё
template
constexpr auto concat(std::array &&&...arrays) {
return std::array{ CONCATENATED_ARRAY_ELEMENTS };
}
- Под &&& я имею в виду, что каждый массив в массивах может быть rvalue/lvalue ref (можно смешивать)
- Под SUMMED_SIZE я имею в виду сумму SIZE (это тривиально)
- Под CONCATENATED_ARRAY_ELEMENTS я подразумеваю объединение всех элементов каждого массива массивов. Если массив в arrays представляет собой rvalue/lvalue, то соответствующие элементы в CONCATENATED_ARRAY_ELEMENTS также должны быть rvalue/lvalues.
- Я не хочу, чтобы дополнительные вызовы ctor перемещения/копирования (в противном случае было бы тривиально реализовать это с помощью рекурсии), я хочу иметь только одно перемещение/копию для каждого элемента в массивах.
- может быть неконструируемым по умолчанию, поэтому элементы должны создаваться с помощью копирования/перемещения.
Код: Выделить всё
ELEMENT
Нетрудно реализовать эту функцию для двух массивов (godbolt), но я не уверен, как обобщить ее на более чем два массива. Я мог бы написать функцию 3/4/5/etc-argument вручную, но количество необходимых функций растет в геометрической прогрессии.
Подробнее здесь: https://stackoverflow.com/questions/791 ... f-ctor-cal