fork download
  1. #include <iostream>
  2. #include <tuple>
  3. #include <type_traits>
  4. #include <sstream>
  5.  
  6. template<size_t N, class... Args>
  7. std::enable_if_t<(N >= sizeof...(Args)), void> read_nth_element(std::tuple<Args...> &t, std::istream &stream) {
  8. }
  9.  
  10. template<size_t N, class... Args>
  11. std::enable_if_t<(N < sizeof...(Args)), void> read_nth_element(std::tuple<Args...> &t, std::istream &stream) {
  12. stream >> std::get<N>(t);
  13. read_nth_element<N + 1, Args...>(t, stream);
  14. }
  15.  
  16.  
  17. template<class... Args>
  18. std::tuple<Args...> read_tuple(std::istream &stream) {
  19. std::tuple<Args...> result;
  20. read_nth_element<0, Args...>(result, stream);
  21.  
  22. return result;
  23. }
  24.  
  25.  
  26. int main() {
  27. std::string str("a 10.0 123");
  28. std::stringstream stream(str);
  29.  
  30. auto tuple = read_tuple<std::string, float, int>(stream);
  31.  
  32. std::cout << std::get<0>(tuple) << " " << std::get<1>(tuple) << " " << std::get<2>(tuple) << std::endl;
  33. }
  34.  
Success #stdin #stdout 0s 4524KB
stdin
Standard input is empty
stdout
a 10 123