#pragma once #ifndef MESSMER_CPPUTILS_IO_IOSTREAMCONSOLE_H #define MESSMER_CPPUTILS_IO_IOSTREAMCONSOLE_H #include "Console.h" namespace cpputils { class IOStreamConsole final: public Console { public: IOStreamConsole(); IOStreamConsole(std::ostream &output, std::istream &input); unsigned int ask(const std::string &question, const std::vector &options) override; bool askYesNo(const std::string &question, bool defaultValue) override; void print(const std::string &output) override; std::string askPassword(const std::string &question) override; private: template Return _askForChoice(const std::string &question, std::function (const std::string&)> parse); static std::function(const std::string &input)> _parseYesNo(); static std::function(const std::string &input)> _parseUIntWithMinMax(unsigned int min, unsigned int max); static boost::optional _parseInt(const std::string &str); std::ostream &_output; std::istream &_input; DISALLOW_COPY_AND_ASSIGN(IOStreamConsole); }; } #endif