// // prompt.h // cli // // Created by Sam Jaffe on 10/10/20. // Copyright © 2020 Sam Jaffe. All rights reserved. // #pragma once #include #include #include #include "message.h" namespace cli { class prompt { private: std::shared_ptr input_prompt_; public: template prompt(Args &&...args) : input_prompt_(make_message(std::forward(args)...)) {} template T read(std::istream & in = std::cin) const { T rval{}; read(rval, in); return rval; } template T & read(T & out, std::istream & in = std::cin) const { while (true) { input_prompt_->print(std::cout); std::string data; if (!std::getline(in, data)) { break; } std::stringstream ss{data}; if (ss >> out) { break; } }; return out; } }; }