Объединение любого количества массивов std::arrays с использованием только минимума вызовов ctorC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Объединение любого количества массивов std::arrays с использованием только минимума вызовов ctor

Сообщение Anonymous »

Я хочу реализовать эту функцию (функцию, которая может объединять любое количество массивов, а также учитывает категорию значений):

Код: Выделить всё

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 перемещения/копирования (в противном случае было бы тривиально реализовать это с помощью рекурсии), я хочу иметь только одно перемещение/копию для каждого элемента в массивах.
  • может быть неконструируемым по умолчанию, поэтому элементы должны создаваться с помощью копирования/перемещения.
Можно ли это сделать?
Нетрудно реализовать эту функцию для двух массивов (godbolt), но я не уверен, как обобщить ее на более чем два массива. Я мог бы написать функцию 3/4/5/etc-argument вручную, но количество необходимых функций растет в геометрической прогрессии.

Подробнее здесь: https://stackoverflow.com/questions/791 ... f-ctor-cal
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»