最終更新日時(UTC):
が更新

履歴 編集

class template
<utility>

std::integer_sequence(C++14)

namespace std {
  template <class T, T... I>
  struct integer_sequence {
    using value_type = T;
    static constexpr std::size_t size() noexcept { return sizeof...(I); }
  };
}

概要

integer_sequenceは、任意の整数型のシーケンスをコンパイル時に表現するクラスである。

このクラスは、tupleオブジェクトを展開して、引数パックとして他の関数に転送することを主目的として作られた。

適格要件

  • T は整数型であること。

タプルインタフェース

名前 説明 対応バージョン
tuple_size 静的な要素数取得(class template) C++26
tuple_element 静的な要素の型取得(class template) C++26

非メンバ関数

名前 説明 対応バージョン
get 指定したインデックスの整数値を取得する C++26

備考

  • C++17まで : テンプレートパラメータ T が整数型でない場合の動作は未定義
  • C++20から : T が整数型でない場合、プログラムは不適格となり、コンパイルエラーとなることが要求されるようになった。

基本的な使い方

#include <iostream>
#include <utility>

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

template <class T, T... Seq>
void f(std::integer_sequence<T, Seq...>)
{
  // 定数のシーケンス{0, 1, 2}を取り出して、関数g()の引数として転送
  g(Seq...);
}

int main()
{
  f(std::integer_sequence<int, 0, 1, 2>());
}

出力

0, 1, 2

構造化束縛とtemplate for文で使用する (C++26)

#include <iostream>
#include <utility>

int main()
{
  // 構造化束縛で整数シーケンスをパックとして取り出す
  constexpr auto [...Index] = std::make_index_sequence<3>();
  ((std::cout << Index << ' '), ...);
  std::cout << std::endl;

  // template for文で整数シーケンスを直接イテレートする
  template for (constexpr std::size_t I : std::make_index_sequence<3>()) {
    std::cout << I << ' ';
  }
  std::cout << std::endl;
}

出力

0 1 2 
0 1 2 

バージョン

言語

  • C++14

処理系

参照