#ifndef MENUDRIVER_H #define MENUDRIVER_H #include #include class MenuDriver { public: MenuDriver(int argc, const char* argv[]); int run(); protected: std::string MENU; std::string readLine(const std::string& prompt = "", bool forceNonEmpty = true, bool clearStream = true); bool readYN(const std::string& prompt = ""); template T read(const std::string& prompt = ""); int getLimit() const { return limit; } int getPassNum() const { return pass; } virtual bool handleChoice(const std::string& choice) = 0; virtual ~MenuDriver() {}; private: bool menuOnce(); void switchInput(); std::istream *isr; std::ifstream inputfile; bool cinFail; int limit; int pass; }; #include "MenuDriver.tcc" // template definations #endif