Ce face std::tuple_size
std::tuple_size<T>::value (sau, mai scurt, std::tuple_size_v<T>) este numărul de elemente al tipului T: un tuplu, o pereche (mereu 2) sau un std::array (N). Valoarea este o constantă de compilare, deci o poți folosi în static_assert, if constexpr sau ca dimensiune de tablou.
Primește un tip, nu un obiect. Pentru o variabilă, scrie std::tuple_size_v<decltype(t)>.
Parametri
| Parametru | Descriere |
|---|---|
T |
Tipul (tuplu, pereche sau std::array). |
Ce returnează
O constantă std::size_t.
Exemple
Exemplul 1: Numărul de elemente la compilare
#include <array>
#include <print>
#include <string>
#include <tuple>
#include <utility>
int main() {
std::tuple<std::string, int, double, bool> rand{"Ana", 30, 1.68, true};
std::array<int, 5> zile{};
std::println("tuple: {}", std::tuple_size_v<decltype(rand)>);
std::println("pair: {}", std::tuple_size_v<std::pair<int, int>>);
std::println("array: {}", std::tuple_size<decltype(zile)>::value);
static_assert(std::tuple_size_v<decltype(rand)> == 4, "rândul trebuie să aibă 4 coloane");
}
Rezultat
tuple: 4
pair: 2
array: 5
Greșeli frecvente
- Scrii
std::tuple_size_v<t>cu numele variabilei: nu compilează, este nevoie de tip. Foloseștedecltype(t). - Aplici pe un tip referință (
decltypeal unui parametruconst auto&). Elimină întâi referința custd::remove_cvref_t.
Comenzi înrudite
std::tuple: Grupează oricâte valori de tipuri diferite într-un singur obiect; generalizarea lui std::pair.std::get: Citește elementul unui tuplu, al unei perechi sau al unui std::array după poziție (sau după tip), la compilare.std::apply: Apelează o funcție dând ca argumente, pe rând, elementele unui tuplu (sau ale unei perechi, ale unui std::array).std::array: Tablou cu dimensiune fixă, cunoscută la compilare, cu interfața unui container (size, at, begin, end).