Почему не существует кусочного построения кортежей?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему не существует кусочного построения кортежей?

Сообщение Anonymous »

Стандартные шаблоны std::pair и std::array являются особыми случаями std::tuple, и само собой разумеется, что они должны иметь очень похожий набор возможностей.

Однако std::pair является уникальным среди всех трех шаблонов и допускает кусочное построение. То есть, если типы T1 и T2 можно сконструировать из набора аргументов a1, a2, ... и b1, b2, ..., то с моральной точки зрения мы можем составить пару

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

"pair p(a1, a2, ..., b1, b2, ...)"
напрямую. Практически это прописано примерно так:

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

std::pair p(std::piecewise_construct,
std::forward_as_tuple(a1, a2, ...),
std::forward_as_tuple(b1, b2, ...));
Вопрос: Почему для массивов и кортежей не существует одинаковой кусочной конструкции? Есть ли глубокая причина или это простое упущение? Например, было бы неплохо иметь:

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

std::tuple t(std::piecewise_construct,
std::forward_as_tuple(a1, a2, ...),
std::forward_as_tuple(b1, b2, ...),
std::forward_as_tuple(c1, c2, ...));
Есть ли причина, по которой это невозможно сделать? [Изменить: Или я совершенно неправильно понимаю цель кусочного построения?]

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

Подробнее здесь: https://stackoverflow.com/questions/118 ... nstruction
Ответить

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

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

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

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

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