std::remove_extent
From cppreference.com
| ヘッダ <type_traits> で定義 |
||
| template< class T > struct remove_extent; |
(C++11以降) | |
T がある型 X の配列である場合、メンバー型 type を X と等しく提供します。そうでない場合、type は T です。T が多次元配列の場合、最初の次元のみが削除されることに注意してください。
プログラムが std::remove_extent の特殊化を追加した場合、動作は未定義です。
目次 |
[編集] メンバー型
| 名前 | 定義 |
type
|
T の要素の型 |
[編集] ヘルパー型
| template< class T > using remove_extent_t = typename remove_extent<T>::type; |
(C++14以降) | |
[編集] 実装例
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; }; |
[編集] 例
このコードを実行
#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]); }
出力
4 5 6
[編集] 関連項目
| (C++11) |
型が配列型であるかをチェックする (クラステンプレート) |
| (C++11) |
配列型の次元数を取得する (クラステンプレート) |
| (C++11) |
指定された次元に沿った配列型のサイズを取得する (クラステンプレート) |
| (C++11) |
与えられた配列型からすべての次元を削除する (クラステンプレート) |