Advertisement
Rochet2

c++ concat with separator

Sep 29th, 2015
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. #include <string>
  2. #include <sstream>
  3.  
  4. template <typename S>
  5. void concat(std::ostringstream& ss, S&& separator)
  6. {
  7. }
  8.  
  9. template <typename S, typename H, typename... T>
  10. void concat(std::ostringstream& ss, S&& separator, H&& h, T&&... t)
  11. {
  12.     ss << separator << std::forward<H>(h);
  13.     concat(ss, std::forward<S>(separator), std::forward<T>(t)...);
  14. }
  15.  
  16. template <typename S>
  17. std::string concat(S&& separator)
  18. {
  19.     return std::string();
  20. }
  21.  
  22. template <typename S, typename H, typename... T>
  23. std::string concat(S&& separator, H&& h, T&&... t)
  24. {
  25.     std::ostringstream oss;
  26.     oss << std::forward<H>(h);
  27.     concat(oss, std::forward<S>(separator), std::forward<T>(t)...);
  28.     return oss.str();
  29. }
  30.  
  31. #include <iostream> // for std::cout
  32.  
  33. int main()
  34. {
  35.     {
  36.         unsigned long long u = -1;
  37.         long long i = -1;
  38.         char c = 100;
  39.         std::string s = "asd";
  40.         std::string const k = "a d";
  41.         std::cout << concat(' ', 123, k, s, i, u, c) << std::endl;
  42.         std::cout << concat(", ", 123, k, std::string("t"), s, i, u, c) << std::endl;
  43.         std::cout << concat(",") << std::endl;
  44.         std::cout << concat("", 123, k, s, i, u, c) << std::endl;
  45.         std::cout << concat(k, 123, k, s, i, u, c) << std::endl;
  46.         return 0;
  47.     }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement