std::remove_extent
Von cppreference.com
| Definiert in der Kopfdatei <type_traits> |
||
| template< class T > struct remove_extent; |
(seit C++11) | |
Wenn T ein Array eines Typs X ist, stellt es den Member-Typedef type gleich X zur Verfügung, andernfalls ist type gleich T. Beachten Sie, dass, wenn T ein mehrdimensionales Array ist, nur die erste Dimension entfernt wird.
Wenn das Programm Spezialisierungen für std::remove_extent hinzufügt, ist das Verhalten undefiniert.
Inhalt |
[bearbeiten] Member-Typen
| Name | Definition |
type
|
der Typ des Elements von T |
[bearbeiten] Hilfstypen
| template< class T > using remove_extent_t = typename remove_extent<T>::type; |
(seit C++14) | |
[bearbeiten] Mögliche Implementierung
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; }; |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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); // compile-time error print_1d(a[1]); }
Ausgabe
4 5 6
[bearbeiten] Siehe auch
| (C++11) |
prüft, ob ein Typ ein Arraytyp ist (Klassenvorlage) |
| (C++11) |
erhält die Anzahl der Dimensionen eines Arraytyps (Klassenvorlage) |
| (C++11) |
erhält die Größe eines Arraytyps entlang einer bestimmten Dimension (Klassenvorlage) |
| (C++11) |
entfernt alle Ausdehnungen vom gegebenen Array-Typ (Klassenvorlage) |