Advertisement
kolbka_

Untitled

Feb 25th, 2023 (edited)
592
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.96 KB | None | 0 0
  1. #include <tuple>
  2.  
  3. template <typename... types1_t, typename... types2_t, typename cmp>
  4. class tuple_merge<std::tuple<types1_t...>, std::tuple<types2_t...>, cmp> {
  5.   template <typename T1, typename T2, typename... Args>
  6.   struct merge_helper {
  7.     using type = typename merge_helper<T1, typename std::tuple<Args...>, Args...>::type;
  8.   };
  9.  
  10.   template <typename... Args>
  11.   struct merge_helper<std::tuple<>, std::tuple<Args...>> {
  12.     using type = std::tuple<Args...>;
  13.   };
  14.  
  15.   template <typename T1, typename T2, typename... Args>
  16.   struct merge_helper<std::tuple<T1, types1_t...>, std::tuple<T2, types2_t...>, Args...> {
  17.     using next_type = typename std::conditional_t<cmp::template cmp<T1, T2>(), std::tuple<T1>, std::tuple<T2>>;
  18.     using type = typename merge_helper<std::tuple<types1_t...>, std::tuple<types2_t...>, Args..., next_type>::type;
  19.   };
  20.  
  21.  public:
  22.   using type = typename merge_helper<std::tuple<types1_t...>, std::tuple<types2_t...>>::type;
  23. };
  24.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement