タプル(std::tuple)すごい

C++11から入った std::tuple は,固定長の型を配列にできる.
例えば,

std::tuple<int, char, std::string> data;

のように,int,char,std::string型を要素に持つタプルができる.
タプルの i 番目の要素には std::get(data) でアクセスができる.
また, i 番目の要素の型は std::tuple_element>::type で取得できる.
ただ,std::tuple_element<0, std::tuple>::type と書くくらいなら int と書けば良い.
これが必要になるのは,dataの型が,何かわからないタプルの場合.
こういうときは, decltype を使って,

template <int i>
typename std::tuple_element<i,decltype(data)>::type test(){
    return std::get<i>(data);
}

のように書く.

コメントする