В C ++ 11 вы можете выполнять множественное присваивание с помощью «tie» (объявлено в заголовке кортежа)
struct foo {
int a, b, c;
} f;
std::tie(f.a, f.b, f.c) = std::make_tuple(1, 2, 3);
Если ваше правое выражение имеет фиксированный размер и вам нужно только получить некоторые изэлементы, вы можете использовать заполнитель игнорирования с tie
std::tie(std::ignore, f.b, std::ignore) = some_tuple; // only f.b modified
Если вы обнаружите, что синтаксис std :: tie (fa, fb, fc) слишком перегружен кодом, вы можете получить функцию-член, возвращающую этот набор ссылок
struct foo {
int a, b, c;
auto members() -> decltype(std::tie(a, b, c)) {
return std::tie(a, b, c);
}
} f;
f.members() = std::make_tuple(1, 2, 3);
Все это, конечно, предполагая, что перегрузка оператора присваивания не является опцией, потому что ваша структура не может быть построена такой последовательностью значений, и в этом случае вы могли бы сказать
f = foo(1, 2, 3);