yu::tuples::element_type
namespace yu::tuples {
template <std::size_t Idx, typename T>
struct element_type;
template <std::size_t Idx, typename T>
using element_type_t = element_type<Idx, T>::type;
}
概要
element_typeは,TupleからIdx番目の要素の型を取得する.
効果
が有効な式でなければ,メンバ型エイリアスyu::tuples::size<T>::valuetypeは定義されない.Idx <でなければ,メンバ型エイリアスyu::tuples::size<T>::valuetypeは定義されない.std::remove_cvref_t<T>が要素数の判明している配列型ならば,その配列の型をメンバ型エイリアスtypeとして定義する.std::tuple_element_t<Idx, std::remove_cvref_t<T>>が有効な型であれば,std::tuple_element_t<Idx, std::remove_cvref_t<T>>をメンバ型エイリアスtypeとして定義する.
以上のどれにも当てはまらないとき,メンバ型エイリアスtypeは定義されない.
カスタマイゼーションポイント
4の条件を満たすようにする.std::tuple_elementを特殊化することでカスタマイズできる.
例
#include <tuple>
#include <type_traits>
#include <yu/tuples/element_type.hpp>
int main() {
// std::tuple
{
using T = std::tuple<int, char, double>;
static_assert(std::is_same_v<yu::tuples::element_type_t<0, T> , int>);
// 参照でもよい
static_assert(std::is_same_v<yu::tuples::element_type_t<0, T&> , int>);
}
// 組み込み配列
{
using T = double [1];
static_assert(std::is_same_v<yu::tuples::element_type_t<0, T> , double>);
}
}
出力