jle_cpp_tk  0.0 2015-04-03 sh1:"d699093732dd5f321606d0ff7a6b63b229f1922c"
A small, safe, selft contained, soft-realtime C++ toolkit
tuple.hpp
1 #ifndef jle_tuple__h
2 #define jle_tuple__h
3 
4 
5 #include <iostream>
6 #include <tuple>
7 
8 
9 
10 namespace jle {
11 
12  template<typename ...T> using tuple = typename std::tuple<T...>;
13 
14 
15  namespace internal {
16  template<std::size_t I = 0, typename F, typename... T>
17  inline typename std::enable_if<I == sizeof...(T), void>::type
18  apply(const jle::tuple<T...> &, F)
19  {
20  //std::cout << "END" <<std::endl;
21  }
22 
23  template<std::size_t I = 0, typename F, typename... T>
24  inline typename std::enable_if<I < sizeof...(T), void>::type
25  apply(const jle::tuple<T...>& t, F f)
26  {
27  f(std::get<I>(t), sizeof...(T)==I+1);
28  apply<I + 1, F, T...>(t, f);
29  }
30  }
31 
32 }
33 
34 
35 
36 template<typename ...T>
37 std::ostream& operator<< (std::ostream& os, const jle::tuple<T...>& t)
38 {
39  os << "t(";
40  jle::internal::apply(t, [&os=os](auto item, bool last) {
41  os << item;
42  if(last==false)
43  os << ", ";
44  });
45  os << ")";
46  return os;
47 }
48 
49 
50 
51 
52 
53 #endif
generic namespace
Definition: alarm.cpp:12