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.

questionAnswers(3)

yourAnswerToTheQuestion