Возможна ли распаковка пары и кортежа в уже созданные переменные
Есть функция, которая возвращает пару или кортеж. Результат её вызова нужно сохранить в уже созданные ранее переменные. Можно ли это сделать не создавая промежуточных объектов?
// Функция возвращает пару.
std::pair<int, int> Foo() { return { 1, 2 }; }
...
// Распаковка пары в новые переменные.
auto [one, two] = Foo();
member_one_ = one; // Затем записываем результат в уже существующие переменные.
member_two_ = two;
В этом примере приходится создавать ненужные переменные one и two, которые по сути не нужны. Вместо этого хотелось бы видеть что-то подобное.
// Записываем возвращаемые значения сразу в необходимые переменные.
[ member_one, member_two ] = Foo();
Ответы (1 шт):
Автор решения: HolyBlackCat
→ Ссылка
Structured binding не может распаковывать в существующие переменные.
Кроме того, обратите внимание, что он создает не несколько отдельных переменных, а одну - безымянную (имена в квадратных скобках ссылаются на ее поля). Хотя в вашем случае это ничего не меняет.
Решение такое: std::tie(member_one, member_two) = Foo();. Работает даже в С++11.