diff --git a/components/CLParser/include/Modelec/CLParser.h b/components/CLParser/include/Modelec/CLParser.h index 49705a0..479cd00 100644 --- a/components/CLParser/include/Modelec/CLParser.h +++ b/components/CLParser/include/Modelec/CLParser.h @@ -13,6 +13,10 @@ public: [[nodiscard]] bool hasOption(const std::string& option) const; + [[nodiscard]] std::optional getOption(const std::string& option) const; + + [[nodiscard]] std::string getOption(const std::string& option, const std::string& defaultValue) const; + template [[nodiscard]] T getOption(const std::string& option, T defaultValue) const { if (!hasOption(option)) { @@ -39,14 +43,23 @@ public: } } - [[nodiscard]] std::optional getOption(const std::string& option) const; - - [[nodiscard]] std::string getOption(const std::string& option, const std::string& defaultValue) const; - [[nodiscard]] bool hasPositionalArgument(int index) const; [[nodiscard]] std::string getPositionalArgument(int index) const; + template + [[nodiscard]] T getPositionalArgument(int index) const { + if (!hasPositionalArgument(index)) { + return T(); + } + + try { + return static_cast(std::stod(_argv[index])); + } catch (std::exception& e) { + return T(); + } + } + [[nodiscard]] int positionalArgumentsCount() const; ~CLParser();