std::tuple_size<std::pair>
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <utility>
|
||
template <class T1, class T2> struct tuple_size<std::pair<T1, T2>> : std::integral_constant<std::size_t, 2> { }; |
(начиная с C++11) | |
Частичная специализация std::tuple_size для pair предоставляет способ во время компиляции получить количество элементов в pair, которое всегда равно 2, используя синтаксис, подобный кортежу.
Унаследован от std::integral_constant
Константы элементы
value [static] |
константное значение 2 (public static константа-элемент) |
Функции-элементы
operator std::size_t |
преобразует объект в std::size_t, возвращает value (public функция-элемент) |
operator() (C++14) |
возвращает value (public функция-элемент) |
Типы элементы
| Тип | Определение |
value_type
|
std::size_t
|
type
|
std::integral_constant<std::size_t, value>
|
Пример
Запустить этот код
#include <iostream>
#include <utility>
#include <tuple>
template<class T>
void test(T t)
{
int a[std::tuple_size<T>::value]; // можно использовать во время компиляции
std::cout << std::tuple_size<T>::value << '\n'; // или во время выполнения
}
int main()
{
test(std::make_tuple(1, 2, 3.14));
test(std::make_pair(1, 3.14));
}
Вывод:
3
2
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 2313 | C++11 | не требовалось, чтобы специализации для pair наследовались от integral_constant
|
требуется |
Смотрите также
| Структурные привязки (C++17) | привязывает указанные имена к подобъектам или элементам кортежа инициализатора |
(C++11) |
получает размер tuple во время компиляции (специализация шаблона класса) |
(C++11) |
получает размер array (специализация шаблона класса) |
получает типы элементов pair (специализация шаблона класса) |