struct to/from std::tuple conversion

后端 未结 4 1832
[愿得一人]
[愿得一人] 2021-02-05 13:30

Assuming I have struct and std::tuple with same type layout:

struct MyStruct { int i; bool b; double d; }
using MyTuple = std::tuple<         


        
4条回答
  •  [愿得一人]
    2021-02-05 14:26

    Tuple to struct conversion is trivial, but backward I think is impossible at current C++ level in general.

    #include 
    #include 
    
    #include 
    
    namespace details
    {
    
    template< typename result_type, typename ...types, std::size_t ...indices >
    result_type
    make_struct(std::tuple< types... > t, std::index_sequence< indices... >) // &, &&, const && etc.
    {
        return {std::get< indices >(t)...};
    }
    
    }
    
    template< typename result_type, typename ...types >
    result_type
    make_struct(std::tuple< types... > t) // &, &&, const && etc.
    {
        return details::make_struct< result_type, types... >(t, std::index_sequence_for< types... >{}); // if there is repeated types, then the change for using std::index_sequence_for is trivial
    }
    
    #include 
    #include 
    
    int main()
    {
        using S = struct { int a; char b; double c; };
        auto s = make_struct< S >(std::make_tuple(1, '2', 3.0));
        assert(s.a == 1);
        assert(s.b == '2');
        assert(s.c == 3.0);
        return EXIT_SUCCESS;
    }
    

    Live example.

提交回复
热议问题