| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- //
- // prompt.h
- // cli
- //
- // Created by Sam Jaffe on 10/10/20.
- // Copyright © 2020 Sam Jaffe. All rights reserved.
- //
- #pragma once
- #include <iostream>
- #include <memory>
- #include <sstream>
- #include "message.h"
- namespace cli {
- class prompt {
- private:
- std::shared_ptr<struct message> input_prompt_;
-
- public:
- template <typename ...Args>
- prompt(Args &&...args)
- : input_prompt_(make_message(std::forward<Args>(args)...)) {}
-
- template <typename T> T read(std::istream & in = std::cin) const {
- T rval{};
- read(rval, in);
- return rval;
- }
-
- template <typename T> 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;
- }
- };
- }
|