{"id":3538,"date":"2018-06-13T16:50:37","date_gmt":"2018-06-13T15:50:37","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=3538"},"modified":"2022-02-16T11:27:32","modified_gmt":"2022-02-16T10:27:32","slug":"c-guns-fold-over-stdtuple","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=3538","title":{"rendered":"C++ Guns: fold over std::tuple of std::vector of Types ..."},"content":{"rendered":"<p><a href=\"http:\/\/roboblog.fatal-fury.de\/?p=3474\">Part 1: print std::array with std::integer_sequence<\/a><br \/>\n<a href=\"http:\/\/roboblog.fatal-fury.de\/?p=3508\">Part 2: convert tuple to parameter pack<\/a><br \/>\n<a href=\"http:\/\/roboblog.fatal-fury.de\/?p=3514\">Part 3: print std::array with std::apply and fold<\/a><br \/>\n<a href=\"http:\/\/roboblog.fatal-fury.de\/?p=3529\">Part 4: fold over std::tuple und erzeugten Assembler Code<\/a><br \/>\n<strong>Part 5: fold over std::tuple of std::vector of Types ...<\/strong><br \/>\n<a href=\"http:\/\/roboblog.fatal-fury.de\/?p=3617\">Part 6: apply generic lambda to tuple<\/a><br \/>\n<a href=\"http:\/\/roboblog.fatal-fury.de\/?p=4994\">Part 7: Play with std::tuple and std::apply<\/a><\/p>\n<p>Okay das ist ein seltsames Konstrukt. Wir haben viele Instanzen vieler Typen \u00fcber die alle zusammen iteriert wird. Eigentlich ist der Code ziemlich klar. Ansonsten.... WOW was alles mit C++17 geht.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &lt;type_traits&gt;\r\n#include &lt;tuple&gt;\r\n#include &lt;vector&gt;\r\n#include &lt;iostream&gt;\r\n\r\ntemplate&lt;typename... Args&gt;\r\nstruct A : std::tuple&lt;std::vector&lt;Args&gt;...&gt;\r\n{   \r\n    template&lt;typename T&gt;\r\n    void add(const T&amp;x) {\r\n        std::get&lt;std::vector&lt;T&gt;&gt;(*this).push_back(x);\r\n    }\r\n};\r\n\r\nnamespace std {\r\n    template&lt;typename...Args&gt;\r\n    struct tuple_size&lt;A&lt;Args...&gt;&gt; : std::integral_constant&lt;std::size_t, sizeof...(Args)&gt; {};\r\n}\r\n\r\nauto func() {\r\n    A&lt;int,double&gt; a;\r\n    a.add(1);\r\n    a.add(2);\r\n    a.add(10.1);\r\n    a.add(20.1);\r\n    \r\n    return a;\r\n}\r\n\r\ntemplate&lt;typename T&gt;\r\nstd::ostream&amp; operator&lt;&lt;(std::ostream&amp; s, const std::vector&lt;T&gt;&amp; vec) {\r\n    for(const auto&amp; x : vec) {\r\n        s &lt;&lt; x &lt;&lt; ' ';\r\n    }\r\n    return s;\r\n}\r\n\r\nvoid func3() {\r\n    auto a = func();\r\n    std::apply(&#x5B;&amp;](const auto&amp;...vectors){ (std::cout &lt;&lt; ... &lt;&lt; vectors);  }, a);  \r\n}\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Part 1: print std::array with std::integer_sequence Part 2: convert tuple to parameter pack Part 3: print std::array with std::apply and fold Part 4: fold over std::tuple und erzeugten Assembler Code Part 5: fold over std::tuple of std::vector of Types ... Part 6: apply generic lambda to tuple Part 7: Play with std::tuple and std::apply Okay [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[17],"class_list":["post-3538","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-cpp"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/3538","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3538"}],"version-history":[{"count":5,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/3538\/revisions"}],"predecessor-version":[{"id":5001,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/3538\/revisions\/5001"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3538"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3538"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}