fork(2) download
  1. #include <iostream>
  2.  
  3. struct csv_t { };
  4. csv_t csv;
  5.  
  6. struct chain
  7. {
  8. bool first, alive;
  9. std::ostream* stream;
  10.  
  11. chain(std::ostream* stream) : first(true), alive(true), stream(stream) { }
  12.  
  13. chain(chain&& src) : first(false), alive(src.alive), stream(src.stream)
  14. { src.alive = false; }
  15.  
  16. ~chain() { if(alive) *stream << "\n"; }
  17. };
  18.  
  19. chain operator<<(std::ostream& str, csv_t& csv)
  20. {
  21. return chain(&str);
  22. }
  23.  
  24. template<typename T>
  25. chain operator<<(chain c, T const& arg)
  26. {
  27. if(c.first) c.first = false;
  28. else *c.stream << ",";
  29. *c.stream << arg;
  30. return c;
  31. }
  32.  
  33. int main() {
  34. std::cout << csv << 1 << "abc" << 3.14f;
  35. }
Success #stdin #stdout 0s 3096KB
stdin
Standard input is empty
stdout
1,abc,3.14