// -*- mode: c++; c-basic-offset: 2; -*- #ifndef ARGS_HH #define ARGS_HH #include #include #include class Args { public: virtual ~Args() {} static Args* create(); virtual void add(char short_opt, std::string const& long_opt, std::string const& argument, std::string const& help) = 0; void add(char short_opt, std::string const& long_opt, std::string const& help) { add(short_opt, long_opt, "", help); } void add(std::string const& long_opt, std::string const& help) { add('\0', long_opt, "", help); } void add(std::string const& long_opt, std::string const& argument, std::string const& help) { add('\0', long_opt, argument, help); } bool run(int argc, char** argv) { return run(argc, argv, std::cerr); } virtual bool run(int argc, char** argv, std::ostream& out) = 0; bool run(std::string const& prg, int argc, char** argv) { return run(prg, argc, argv, std::cerr); } virtual bool run( std::string const& prg, int argc, char** argv, std::ostream& out) = 0; virtual bool good() const = 0; virtual bool is_set(char short_opt) const = 0; virtual bool is_set(std::string const& long_opt) const = 0; virtual char const* arg(char short_opt, char const* fallback) const = 0; virtual char const* arg(std::string const& long_opt, char const* fallback) const = 0; virtual std::vector const& arguments() const = 0; void print_help() const { print_help(std::cout); } virtual void print_help(std::ostream& out) const = 0; virtual void print_help(std::ostream& out, size_t width) const = 0; protected: Args() {} Args(Args const&) = delete; }; #endif // ARGS_HH