Advertisement
Radfler

::for_each_element

May 1st, 2016
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.71 KB | None | 0 0
  1. #include <functional>
  2. #include <tuple>
  3. #include <type_traits>
  4. #include <utility>
  5.  
  6. namespace details {
  7.  
  8.   template<typename Tuple, typename Callable, std::size_t... Indexes>
  9.   void for_each_element(Tuple&& tuple, Callable&& callable, std::index_sequence<Indexes...>) {
  10.    
  11.     (std::invoke(std::forward<Callable>(callable), std::get<Indexes>(std::forward<Tuple>(tuple))), ...);
  12.  
  13.   }
  14.  
  15. }
  16.  
  17. template<typename Tuple, typename Callable>
  18. void for_each_element(Tuple&& tuple, Callable&& callable) {
  19.  
  20.   using index_sequence = std::make_index_sequence<std::tuple_size<std::decay_t<Tuple>>::value>;
  21.   details::for_each_element(std::forward<Tuple>(tuple), std::forward<Callable>(callable), index_sequence{});
  22.  
  23. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement