Giriş
Şu satırı dahil ederiz
#include <tuple>
Bir veya daha fazla tuple'ı birleştirerek yeni bir tuple oluşturur. Genelde std::make_tuple ile kullanılır.
Örnek
Çok basitleştirilimiş bu örnekte önce bir pair yaratılıyor. pair make_tuple() ile tuple haline getiriyor ve diğer tuple nesneleri ile birleştiriliyor.
return std::tuple_cat(std::make_tuple(std::make_pair(...,...)),...);
ÖrnekŞöyle yaparız. Bu örnek çok daha karışık. std::make_index_sequence ile n tane tekrar eden elemanlı yapı yaratılıyor ve bu bir tuple'a çevriliyor. Daha sonra tüm tuple nesneleri std::tuple_cat ile birleştirilip yeni bir tuple yaratılıyor.
template <typename T,size_t reps>struct repeated_type {using type = T;static const size_t N = reps;};template <typename T,std::size_t...n>auto n_tuple_impl(std::index_sequence<n...>){return std::make_tuple( (n,T{})...);}template <typename repT>using n_tuple_single = decltype( n_tuple_impl<typename repT::type>(
std::make_index_sequence<repT::N>() )
);template <typename...repT>using n_tuple = decltype( std::tuple_cat( ( n_tuple_single<repT>() )... ) );int main() {using two_ints = repeated_type<int,2>;using three_doubles = repeated_type<double,3>;using my_tuple = n_tuple<two_ints,three_doubles>;static_assert(std::is_same<std::tuple<int,int,double,double,double>,my_tuple>::value);}
Hiç yorum yok:
Yorum Gönder