fork download
  1. #include <iostream>
  2. #include <sstream>
  3. #include <cstdint>
  4.  
  5. struct Callback
  6. {
  7. virtual void dosomething(uint8_t level, const char *msg) = 0;
  8. };
  9.  
  10. Callback *callback = nullptr;
  11.  
  12. void log_impl(std::ostream&) {}
  13.  
  14. template<typename T, typename ... Args>
  15. void log_impl(std::ostream &os, const T &first_arg, const Args&... args)
  16. {
  17. os << first_arg;
  18. log_impl(os, args...);
  19. }
  20.  
  21. template<typename ... Args>
  22. void log(uint8_t level, const Args&... args)
  23. {
  24. std::ostringstream msg;
  25. log_impl(msg, args...);
  26. callback->dosomething(level, msg.str().c_str()); // some api
  27. }
  28.  
  29. struct MyCallback : Callback
  30. {
  31. void dosomething(uint8_t level, const char *msg) override { std::cout << "[" << int(level) << "]: " << msg << std::endl; }
  32. };
  33.  
  34. int main()
  35. {
  36. MyCallback cb;
  37. callback = &cb;
  38.  
  39. log(1, "Hello ", "World", '!', " ", 12345);
  40.  
  41. return 0;
  42. }
Success #stdin #stdout 0.01s 5444KB
stdin
Standard input is empty
stdout
[1]: Hello World! 12345