Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::tuple_element<std::tuple>

      From cppreference.com
      <cpp‎ |utility‎ |tuple
       
       
      Utilities library
       
       
      Defined in header<tuple>
      template<std::size_t I,class...Types>
      struct tuple_element< I,std::tuple<Types...>>;
      (since C++11)

      Provides compile-time indexed access to the types of the elements of the tuple.

      Contents

      [edit]Member types

      Type Definition
      type the type ofIth element of the tuple, whereI is in[0sizeof...(Types))

      [edit]Possible implementation

      template<std::size_t I,class T>struct tuple_element; #ifndef __cpp_pack_indexing// recursive casetemplate<std::size_t I,class Head,class...Tail>struct tuple_element<I,std::tuple<Head, Tail...>>:std::tuple_element<I-1,std::tuple<Tail...>>{}; // base casetemplate<class Head,class...Tail>struct tuple_element<0,std::tuple<Head, Tail...>>{using type= Head;}; #else// C++26 implementation using pack indexingtemplate<std::size_t I,class...Ts>struct tuple_element<I,std::tuple<Ts...>>{using type= Ts...[I];};#endif

      [edit]Example

      Run this code
      #include <boost/type_index.hpp>#include <cstddef>#include <iostream>#include <string>#include <tuple>#include <utility> template<typename TupleLike,std::size_t I=0>void printTypes(){ifconstexpr(I==0)std::cout<< boost::typeindex::type_id_with_cvr<TupleLike>()<<'\n'; ifconstexpr(I<std::tuple_size_v<TupleLike>){using SelectedType=std::tuple_element_t<I, TupleLike>; std::cout<<"  The type at index "<< I<<" is: "<< boost::typeindex::type_id_with_cvr<SelectedType>()<<'\n';        printTypes<TupleLike, I+1>();}} struct MyStruct{}; using MyTuple=std::tuple<int,long&,constchar&,bool&&,std::string,volatile MyStruct>; using MyPair=std::pair<char,bool&&>; static_assert(std::is_same_v<std::tuple_element_t<0, MyPair>,char>);static_assert(std::is_same_v<std::tuple_element_t<1, MyPair>,bool&&>); int main(){    printTypes<MyTuple>();    printTypes<MyPair>();}

      Possible output:

      std::tuple<int, long&, char const&, bool&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, MyStruct volatile>  The type at index 0 is: int  The type at index 1 is: long&  The type at index 2 is: char const&  The type at index 3 is: bool&&  The type at index 4 is: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >  The type at index 5 is: MyStruct volatilestd::pair<char, bool&&>  The type at index 0 is: char  The type at index 1 is: bool&&

      [edit]See also

      Structured binding(C++17) binds the specified names to sub-objects or tuple elements of the initializer[edit]
      obtains the element types of a tuple-like type
      (class template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/tuple/tuple_element&oldid=176749"

      [8]ページ先頭

      ©2009-2025 Movatter.jp