#ifndef ARGPARSER_OPTION_H #define ARGPARSER_OPTION_H #include "parse-result.h" #include #include #include #include namespace argparser { class option { public: explicit option(std::string name) : name(std::move(name)) {} virtual ~option() = default; void parse(std::optional arg, std::any &val) { return this->do_parse(std::move(arg), val); } [[nodiscard]] std::string get_name() { return name; } [[nodiscard]] virtual bool consumes_value() const = 0; virtual void validate(const parse_result &res) const = 0; protected: const std::string name; private: virtual void do_parse(std::optional arg, std::any &val) = 0; }; using option_handle = std::shared_ptr