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; mitstd::tie
, die temporären, die in der rhs von der Abtretung anstd::ignore
initialisiert wird. - p0144r2: "Symmetrie mit
std::tie
würde vorschlagen, mit etwas, das wie einstd::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, wiestd::ignore
fürstd::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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den strukturierten Bindungen Vorschlag enthält einen eigenen Abschnitt, deine Frage zu beantworten (P0144R2):
Beachten Sie jedoch, dass der Arbeitsentwurf der Norm ist derzeit in überarbeitung durch die jeweils zuständigen Nationalen Stellen (NB), und es gibt ein NB Kommentar anfordern diese Funktion (P0488R0, US100):
std::ignore
im strukturierten Bindungen.Nicht. Sie müssen nur, um eine variable ein name, der nicht erwähnt werden, später.
-Wunused-variable
, die Sie verwenden können:[[maybe_unused]] auto [ a, b, dummy ] = std::tuple(1,"2",3f);
aber das bedeutet, dass jeder von Ihnen könnte unbenutzt sein, aber Sie wissen nicht, was es ist. es gibt keine gute Lösung für diesen Fall richtig. hoffentlich werde verbessert werden, in c++20. entnommen von hier: stackoverflow.com/questions/41404001/...(void)dummy;
um loszuwerden die Warnung nicht verwendete variable, ohne die anderen Variablen.