fork download
  1. #include <iostream>
  2. struct LogHelper
  3. {
  4. std::ostream& Target;
  5. LogHelper(std::ostream& Target)
  6. : Target(Target)
  7. {
  8. }
  9. ~LogHelper()
  10. {
  11. Target << std::endl;
  12. }
  13. };
  14. template<class T>
  15. std::ostream& operator<< (LogHelper Stream, T const& Rhs)
  16. {
  17. return Stream.Target << Rhs;
  18. }
  19. struct Log
  20. {
  21. std::ostream& Target;
  22. Log(std::ostream& Target)
  23. : Target(Target)
  24. {
  25. }
  26. };
  27. template<class T>
  28. LogHelper operator<< (Log& Stream, T const& Rhs)
  29. {
  30. Stream.Target << Rhs;
  31. return LogHelper(Stream.Target);
  32. }
  33. Log TollesLog(std::cout);
  34. struct UserDefinedType
  35. {
  36. float Lhs, Rhs;
  37. UserDefinedType(float Lhs, float Rhs)
  38. : Lhs(Lhs), Rhs(Rhs)
  39. {
  40. }
  41. };
  42. std::ostream& operator<< (std::ostream& Stream, UserDefinedType const& Rhs)
  43. {
  44. return Stream << '(' << Rhs.Lhs << '|' << Rhs.Rhs << ')';
  45. }
  46. int main()
  47. {
  48. UserDefinedType Var(5, -5);
  49. TollesLog << "Hallo" << ' ' << "Welt" << 123;
  50. TollesLog << "Hallo Welt";
  51. TollesLog << "Mein Typ: " << Var;
  52. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
Hallo Welt123
Hallo Welt
Mein Typ: (5|-5)