Я часто пишу фрагменты типа
int x,y,z; tie(x,y,z) = g[19];
где, например, g
было объявлено ранее
vector<tuple<int,int,int>> g(100);
Проблема в том, что, возможно, позже я хочу, чтобы x
и y
указывали на внутренности g
по ссылке, а рефакторинг был уродлив, например
int &x = get<0>(g[19]);
int &y = get<1>(g[19]);
int &z = get<2>(g[19]);
или иногда даже хуже, например, если доступ является более сложным выражением
tuple<int,int,int> &p = g[19]; // if the rhs was actually more complicated
int &x = get<0>(p);
int &y = get<1>(p);
int &z = get<2>(p);
Есть ли лучший рефакторинг, больше в стиле задания для привязки (..)?
Трудность, насколько я понимаю, заключается в том, что ссылки настаивают на инициализации именно в их объявлении. Итак, возможно, другими словами, есть ли способ использовать синтаксис tie
-like для множественной инициализации переменных в С++ (это также сделает более раннее использование не ссылочного использования)?