std::ignore mit strukturierten Bindungen?

Prelude:

std::tuple<int, int, int> f();
std::tuple<int, int, float, int> g();

C++1z einführen syntax für strukturierte Bindungen, die es möglich machen, zu schreiben, anstatt

int a, b, c;
std::tie(a, b, c) = f();

etwas wie

auto [a, b, c] = f();

Jedoch std::tie auch angeben dürfen std::ignore zu ignorieren bestimmter Komponenten, e.g:

std::tie(a, b, std::ignore, c) = g();

Wird es möglich sein, etwas ähnliches zu tun mit der neuen strukturierten Bindungen syntax? Wie würde es funktionieren?

  • Setze einfach einen beliebigen Namen gibt.
  • nicht einen beliebigen Namen erstellen Sie eine Kopie ?
  • Nicht mehr Exemplare, als mit std::ignore, denke ich. Da haben wir garantiert copy elision, die dummy-variable initialisiert wird; mit std::tie, die temporären, die in der rhs von der Abtretung an std::ignore initialisiert wird.
  • p0144r2: "Symmetrie mit std::tie würde vorschlagen, mit etwas, das wie ein std::ignore. Dies jedoch lästig.". Trotz dieser, ich denke, dass es ein NB Kommentar anfordern
  • hoffentlich wird es noch optimiert werden entfernt.
  • Wäre es möglich, ein makro auto[IGNORE] generiert einen eindeutigen Namen (BSP: compiler-spezifischen COUNTER oder LINIE). Wäre es lesbar genug, und in der Praxis funktionieren würde, wie std::ignore für std::tie.
  • Ich meinte __COUNTER__ und __LINE__
  • Nein, die einzige Kopie einer decomp Erklärung macht ist die Sache, die wird zersetzt. Die Dinge erklärt wird, sind entweder Aliase für die Elemente/Elemente, die Sache oder Verweise, die bindet, was get gibt.

InformationsquelleAutor jotik | 2016-11-18
Schreibe einen Kommentar