std::tupleの反復処理
std::tupleで反復処理をさせる方法
#include <tuple> #include <string> #include <iostream> #include <utility> template <class Value> void print_value(std::ostream& stream, std::size_t index, const Value& value){ stream << "index(" << index << ") " << value << std::endl; } template <class Tuple, std::size_t... Index> void print_tuple_impl(const Tuple& tuple, std::index_sequence<Index...>) { (print_value(std::cout,Index, std::get<Index>(tuple)), ...); } template <class Tuple, std::size_t TupleSize = std::tuple_size_v<Tuple>> void print_tuple(const Tuple& tuple) { print_tuple_impl(tuple, std::make_index_sequence<TupleSize>()); } int main() { std::tuple<int, int, int, std::string> value { 1, 2, 3, "end" }; print_tuple(value); return 0; }
std::make_index_sequence とか知らなかってなぁというのとfold expression なんかはすっかり忘れてた。。。