fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4.  
  5. template <typename M, typename T> void process(M&, T&);
  6.  
  7. template <typename M, typename T>
  8. void process_impl(M& m, const T& t) {
  9. m.write(t);
  10. }
  11. template <typename M, typename T>
  12. void process_impl(M& m, const std::vector<T>& v) {
  13. for (const auto& t: v) {
  14. process(m, t);
  15. }
  16. }
  17.  
  18. template <typename M, typename T>
  19. void process(M& m, const T& t) {
  20. process_impl(m, t);
  21. }
  22.  
  23. struct media {
  24. template <typename T> void write(const T& t) { std::cout << t << std::endl; }
  25. };
  26. void process(media& m, const std::string& s) {
  27. process(m, s.size());
  28. }
  29.  
  30. template <typename M>
  31. struct debug_media {
  32. template <typename T> void write(const T& t) { m.write(t); }
  33.  
  34. media m;
  35. };
  36. template <typename M, typename T>
  37. void process(debug_media<M>& d, const T& t) {
  38. std::cout << "debug: ";
  39. process(d.m, t);
  40. }
  41.  
  42. int main() {
  43. {
  44. media m;
  45. process(m, std::vector<std::string>{"1", "22"});
  46. }
  47. {
  48. debug_media<media> m;
  49. process(m, std::vector<std::string>{"1", "22"});
  50. }
  51. return 0;
  52. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
1
2
debug: 1
2