fork download
  1. #include <tuple>
  2. #include <iostream>
  3. #include <string>
  4.  
  5. // tuple printer
  6. template<class Tuple, std::size_t N>
  7. struct TuplePrinter {
  8. static std::ostream& print(std::ostream& os, const Tuple& t)
  9. {
  10. TuplePrinter<Tuple, N - 1>::print(os, t);
  11. os << ", " << std::get<N - 1>(t);
  12. return os;
  13. }
  14. };
  15.  
  16. template<class Tuple>
  17. struct TuplePrinter<Tuple, 1> {
  18. static std::ostream& print(std::ostream& os, const Tuple& t)
  19. {
  20. os << std::get<0>(t);
  21. return os;
  22. }
  23. };
  24.  
  25. template<class... Args>
  26. std::ostream& print(std::ostream& os, const std::tuple<Args...>& t)
  27. {
  28. os << "(";
  29. TuplePrinter<decltype(t), sizeof...(Args)>::print(os, t);
  30. os << ")\n";
  31. return os;
  32. }
  33.  
  34.  
  35. // class to keep tuple inside
  36. template<typename... Args>
  37. class tuple_class {
  38. template<typename... Args2>
  39. friend std::ostream& operator<<(std::ostream& os, const tuple_class<Args2...> &m);
  40.  
  41. std::tuple<Args...> tup;
  42. public:
  43. tuple_class(Args&&... args) : tup(std::forward<Args>(args)...) {
  44.  
  45. }
  46. };
  47.  
  48. // usage of the printer
  49. template<typename... Args>
  50. std::ostream& operator<<(std::ostream& os, const tuple_class<Args...> &m) {
  51. print(os, m.tup);
  52. return os;
  53. }
  54.  
  55.  
  56.  
  57. int main() {
  58. tuple_class<int,float,std::string> tc( 1,3.0f,"string" );
  59. std::cout << tc;
  60. return 0;
  61. }
Success #stdin #stdout 0s 3412KB
stdin
Standard input is empty
stdout
(1, 3, string)