Skip to content

Latest commit

 

History

History
97 lines (75 loc) · 2.99 KB

tuple_element.md

File metadata and controls

97 lines (75 loc) · 2.99 KB

#tuple_element

namespace std {
  template <size_t I, class T> class tuple_element; // 宣言のみで定義なし

  template <size_t I, class T> class tuple_element<I, const T>;
  template <size_t I, class T> class tuple_element<I, volatile T>;
  template <size_t I, class T> class tuple_element<I, const volatile T>;

  template <size_t I, class... Types>
  class tuple_element<I, tuple<Types...>> {
  public:
    typedef TI type;
  };
}
  • tuple[link ./tuple.md]

##概要 tuple_elementは、タプルとして見なせる型から、I番目の要素型を取得するためのクラスである。 tuple_elementの第1テンプレート引数に要素番号、第2引数のタプルの型を指定し、ネスト型であるtype型を取り出すことで要素型を得ることができる。

  • template <size_t I, class T> class tuple_element;

特殊化のための先行宣言。特殊化されていない型の場合、定義が行われないため要素型を取得しようとする段階でコンパイルエラーとなる。

  • template <size_t I, class T> class tuple_element<I, const T>;
  • template <size_t I, class T> class tuple_element<I, volatile T>;
  • template <size_t I, class T> class tuple_element<I, const volatile T>;

CV修飾された型からも要素型を取得できるようにするための部分特殊化。

  • template <size_t I, class... Types> class tuple_element<I, tuple<Tuples...>>;

std::tupleから要素型を取得できるようにするための部分特殊化。

##例

#include <tuple>
#include <type_traits>

int main()
{
  static_assert(std::is_same<
                  std::tuple_element<0, std::tuple<int, char, double>>::type,
                  int
                >::value, "");

  static_assert(std::is_same<
                  std::tuple_element<1, std::tuple<int, char, double>>::type,
                  char
                >::value, "");

  static_assert(std::is_same<
                  std::tuple_element<2, std::tuple<int, char, double>>::type,
                  double
                >::value, "");

  // const修飾
  static_assert(std::is_same<
                  std::tuple_element<0, const std::tuple<int, char, double>>::type,
                  const int
                >::value, "");

  // volatile修飾
  static_assert(std::is_same<
                  std::tuple_element<0, volatile std::tuple<int, char, double>>::type,
                  volatile int
                >::value, "");

  // const, volatile修飾
  static_assert(std::is_same<
                  std::tuple_element<0, const volatile std::tuple<int, char, double>>::type,
                  const volatile int
                >::value, "");
}
  • tuple_element[color ff0000]

###出力

##バージョン ###言語

  • C++11

###処理系

##参照