From ca71a11109b96c73562a0efd5e6b755cbe6a95f1 Mon Sep 17 00:00:00 2001 From: ackimixs Date: Mon, 20 May 2024 13:01:32 +0200 Subject: [PATCH] template get positional arg --- .../CLParser/include/Modelec/CLParser.h | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) 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();