fork(1) download
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. class Logger {
  7. public:
  8. Logger(ostream& os) : os_(os), curIndentLevel_(0) {}
  9. Logger& increaseLevel() { ++curIndentLevel_; return *this; }
  10. Logger& decreaseLevel() { --curIndentLevel_; return *this; }
  11.  
  12. private:
  13. template<typename T> friend ostream& operator<<(Logger&, T);
  14.  
  15. ostream& os_;
  16. int curIndentLevel_;
  17. };
  18.  
  19. template<typename T>
  20. ostream& operator<<(Logger& log, T op) {
  21. for(int i = 0; i < log.curIndentLevel_ * 4; ++i) {
  22. log.os_ << ' ';
  23. }
  24. log.os_ << op;
  25. return log.os_;
  26. }
  27.  
  28. int main() {
  29. Logger log(cout);
  30.  
  31. log.increaseLevel() << "Hello World!" << endl;
  32. log.decreaseLevel() << "Hello World!" << endl;
  33. return 0;
  34. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
    Hello World!
Hello World!