std:: remove_extent
From cppreference.net
C++
Metaprogramming library
| Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++14)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definido en el encabezado
<type_traits>
|
||
|
template
<
class
T
>
struct remove_extent ; |
(desde C++11) | |
Si
T
es un array de algún tipo
X
, proporciona el typedef miembro
type
igual a
X
, de lo contrario
type
es
T
. Nótese que si T es un array multidimensional, solo se elimina la primera dimensión.
Si el programa añade especializaciones para
std::remove_extent
, el comportamiento es indefinido.
Contenidos |
Tipos de miembros
| Nombre | Definición |
type
|
el tipo del elemento de
T
|
Tipos auxiliares
|
template
<
class
T
>
using remove_extent_t = typename remove_extent < T > :: type ; |
(desde C++14) | |
Implementación posible
template<class T> struct remove_extent { using type = T; }; template<class T> struct remove_extent<T[]> { using type = T; }; template<class T, std::size_t N> struct remove_extent<T[N]> { using type = T; }; |
Ejemplo
Ejecutar este código
#include <algorithm> #include <iostream> #include <iterator> #include <type_traits> template<class A> std::enable_if_t<std::rank_v<A> == 1> print_1d(const A& a) { std::copy(a, a + std::extent_v<A>, std::ostream_iterator<std::remove_extent_t<A>>(std::cout, " ")); std::cout << '\n'; } int main() { int a[][3] = {{1, 2, 3}, {4, 5, 6}}; // print_1d(a); // error en tiempo de compilación print_1d(a[1]); }
Salida:
4 5 6
Véase también
|
(C++11)
|
comprueba si un tipo es un tipo array
(plantilla de clase) |
|
(C++11)
|
obtiene el número de dimensiones de un tipo array
(plantilla de clase) |
|
(C++11)
|
obtiene el tamaño de un tipo array a lo largo de una dimensión especificada
(plantilla de clase) |
|
(C++11)
|
elimina todas las extensiones del tipo array dado
(plantilla de clase) |