prompt.h 806 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //
  2. // prompt.h
  3. // cli
  4. //
  5. // Created by Sam Jaffe on 10/10/20.
  6. // Copyright © 2020 Sam Jaffe. All rights reserved.
  7. //
  8. #pragma once
  9. #include <iostream>
  10. #include <memory>
  11. #include <sstream>
  12. #include "message.h"
  13. namespace cli {
  14. class prompt {
  15. private:
  16. std::shared_ptr<struct message> input_prompt_;
  17. public:
  18. template <typename ...Args>
  19. prompt(Args &&...args)
  20. : input_prompt_(make_message(std::forward<Args>(args)...)) {}
  21. template <typename T> T read(std::istream & in = std::cin) const {
  22. T rval{};
  23. while (true) {
  24. input_prompt_->print(std::cout);
  25. std::string data;
  26. if (!std::getline(in, data, '\n') || data.empty()) {
  27. break;
  28. }
  29. std::stringstream ss{data};
  30. if (ss >> rval) {
  31. break;
  32. }
  33. };
  34. return rval;
  35. }
  36. };
  37. }