fork download
  1. #include <iostream>
  2. #include <tuple>
  3. #include <string>
  4.  
  5. struct Logger2
  6. {
  7. explicit Logger2(const std::string& name) : name(name) {}
  8. Logger2& operator << (const std::pair<const char*, const char*>& p)
  9. {
  10. std::cout << name << ":" << p.first << " " << p.second << std::endl;
  11. return *this;
  12. }
  13. std::string name;
  14. };
  15.  
  16. struct Logger
  17. {
  18. Logger& operator << (const std::string& s)
  19. {
  20. std::cout << "Log:" << s << std::endl;
  21. return *this;
  22. }
  23.  
  24. Logger2 operator () (const std::string& name) const
  25. {
  26. return Logger2{name};
  27. }
  28. };
  29.  
  30. #define LOG Logger{}
  31.  
  32.  
  33. int main()
  34. {
  35. LOG << "old log";
  36. LOG("NamedLogger") << std::make_pair("hello", "world");
  37. }
  38.  
Success #stdin #stdout 0s 3272KB
stdin
Standard input is empty
stdout
Log:old log
NamedLogger:hello world