Ce face std::get
std::get<I>(t) returnează o referință la elementul de pe poziția I (de la 0). Funcționează pentru std::tuple, std::pair (0 = first, 1 = second), std::array și std::variant. Poziția trebuie să fie o constantă; dacă este prea mare, programul nu compilează, deci nu există erori la rulare.
Din C++14 poți alege elementul după tip: std::get<std::string>(t). Merge doar dacă tipul apare o singură dată în tuplu; altfel, eroare de compilare.
Parametri
| Parametru | Descriere |
|---|---|
I |
Poziția elementului (constantă la compilare). |
T |
Sau: tipul elementului, dacă este unic în tuplu. |
t |
Tuplul, perechea sau tabloul. |
Ce returnează
O referință la element, deci îl poți și modifica.
Exemple
Exemplul 1: După poziție și după tip
#include <array>
#include <print>
#include <string>
#include <tuple>
#include <utility>
int main() {
std::tuple<std::string, int, double> carte{"Ion", 1920, 39.9};
std::get<2>(carte) = 34.5; // modificare
std::println("{} ({}) - {} lei", std::get<0>(carte), std::get<int>(carte), std::get<double>(carte));
std::pair<std::string, int> p{"Cluj", 1};
std::println("{} {}", std::get<0>(p), std::get<1>(p));
std::array<int, 3> a{7, 8, 9};
std::println("{}", std::get<2>(a));
}
Rezultat
Ion (1920) - 34.5 lei
Cluj 1
9
Greșeli frecvente
- Scrii
std::get<3>(t)pe un tuplu cu 3 elemente: eroare de compilare (pozițiile sunt 0, 1, 2). - Folosești
std::get<int>(t)pe un tuplu cu douăint-uri: compilatorul nu știe pe care să-l aleagă și dă eroare. Folosește poziția. - Folosești
std::getpe unstd::variantcare conține alt tip: aruncăstd::bad_variant_access. Verifică întâi custd::holds_alternativesau foloseștestd::get_if.
Comenzi înrudite
std::tuple: Grupează oricâte valori de tipuri diferite într-un singur obiect; generalizarea lui std::pair.std::pair: Grupează două valori, eventual de tipuri diferite, într-un singur obiect cu membrii first și second.std::array: Tablou cu dimensiune fixă, cunoscută la compilare, cu interfața unui container (size, at, begin, end).std::tie: Creează un tuplu de referințe la variabile existente: despachetează un tuplu în ele sau compară mai multe câmpuri deodată.std::variant: O valoare care are, la un moment dat, exact unul dintre mai multe tipuri posibile (union sigur).