Quais são os casos de uso para ligações estruturadas?
O padrão C ++ 17 apresenta um novoligações estruturadas recurso, que foi inicialmenteproposto em 2015 e cuja aparência sintática foi amplamentediscutido mais tarde.
Alguns usos para eles vêm à mente assim que você consulta a documentação.
Decomposição de agregados
Vamos declarar uma tupla:
std::tuple<int, std::string> t(42, "foo");
Cópias elementares nomeadas podem ser facilmente obtidas com ligações estruturadas em uma linha:
auto [i, s] = t;
que é equivalente a:
auto i = std::get<0>(t);
auto s = std::get<1>(t);
ou
int i;
std::string s;
std::tie(i, s) = t;
As referências aos elementos da tupla também podem ser obtidas sem problemas:
auto& [ir, sr] = t;
const auto& [icr, scr] = t;
Assim, podemos fazer com matrizes ou estruturas / classes cujos membros são todos públicos.
Vários valores de retorno
Uma maneira conveniente de obter vários valores de retorno de uma função segue imediatamente acima.
O quê mais?
Você pode fornecer outros casos de uso possivelmente menos óbvios para ligações estruturadas? De que outra forma eles podem melhorar a legibilidade ou mesmo o desempenho do código C ++?
Notas
Como mencionado nos comentários, a implementação atual de ligações estruturadas carece de alguns recursos. Eles não são variados e sua sintaxe não permite ignorar membros agregados explicitamente.Aqui pode-se encontrar uma discussão sobre variabilidade.