std::remove_extent
Материал из cppreference.com
| Определён в заголовочном файле <type_traits>
|
||
| template< class T > struct remove_extent; |
(начиная с C++11) | |
Если T является массивом из элементов некоторого типа X, то предоставляет определение типа в члене type, которое будет равно X, иначе оно будет равно T. Обратите внимание, что если T является многомерным массивом, то удаляется только первое его измерение.
Содержание |
[править] Типы-члены
| Имя | Определение |
type
|
Тип элементов в T
|
[править] Вспомогательные типы
| template< class T > using remove_extent_t = typename remove_extent<T>::type; |
(начиная с C++14) | |
[править] Возможная реализация
template<class T> struct remove_extent { typedef T type; }; template<class T> struct remove_extent<T[]> { typedef T type; }; template<class T, std::size_t N> struct remove_extent<T[N]> { typedef T type; }; |
[править] Пример
Запустить этот код
#include <iostream> #include <iterator> #include <algorithm> #include <type_traits> template<class A> typename std::enable_if< std::rank<A>::value == 1 >::type print_1d(const A& a) { copy(a, a+std::extent<A>::value, std::ostream_iterator<typename std::remove_extent<A>::type>(std::cout, " ")); std::cout << '\n'; } int main() { int a[][3] = {{1,2,3},{4,5,6}}; // print_1d(a); // не скомпилируется print_1d(a[1]); }
Вывод:
4 5 6
[править] См. также
| (C++11) |
Проверяет является ли тип типом массива или нет (шаблон класса) |
| (C++11) |
Получает число измерений массива (шаблон класса) |
| (C++11) |
Получает размер массива типа по указанному измерению (шаблон класса) |
| (C++11) |
Удаляет все измерения от данного типа массива (шаблон класса) |

