namespace std {
template <class... T>
using index_sequence_for = make_index_sequence<sizeof...(T)>;
}
概要
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"));
}
出力
0, 1, 2
バージョン
言語
- C++14
処理系
- Clang: 3.4 ✅
- GCC: 4.9.0 ✅
- ICC: ??
- Visual C++: 2015 ✅