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