Skip to content

Latest commit

 

History

History
78 lines (59 loc) · 1.92 KB

index_sequence_for.md

File metadata and controls

78 lines (59 loc) · 1.92 KB

index_sequence_for

  • utility[meta header]
  • std[meta namespace]
  • type-alias[meta id-type]
  • cpp14[meta cpp]
namespace std {
  template <class... T>
  using index_sequence_for = make_index_sequence<sizeof...(T)>;
}
  • make_index_sequence[link make_index_sequence.md]

概要

index_sequence_forは、型のシーケンスを0から始まるsize_t型整数シーケンスに変換する、make_index_sequenceの別名である。

別の言い方をすると、パラメータパックTs...に含まれる各型に対して先頭から順番に0始まりのインデックスを振り、そのインデックスの列(integer_sequence)を返す。

テンプレートパラメータは、以下を意味する:

  • ...T : 任意の型のシーケンス

#include <iostream>
#include <utility>
#include <tuple>

void g(std::size_t a, std::size_t b, std::size_t c)
{
  std::cout << a << ", " << b << ", " << c << std::endl;
}

template <class T, T... Seq>
void f_(std::integer_sequence<T, Seq...>)
{
  g(Seq...);
}

template <class... T>
void f(std::tuple<T...>&&)
{
  // 型のシーケンスを、インデックスのシーケンスに変換
  f_(std::index_sequence_for<T...>());
}

int main()
{
  f(std::make_tuple(1, 'a', "Hello"));
}
  • std::index_sequence_for[color ff0000]
  • std::integer_sequence[link integer_sequence.md]
  • std::make_tuple[link /reference/tuple/make_tuple.md]

出力

0, 1, 2

バージョン

言語

  • C++14

処理系

参照