Parcourir la source

Support throwing an error if a bad argument is provided.

Sam Jaffe il y a 4 ans
Parent
commit
59687a5c90
2 fichiers modifiés avec 12 ajouts et 1 suppressions
  1. 6 1
      include/program_args/arguments_impl.hpp
  2. 6 0
      include/program_args/exception.h

+ 6 - 1
include/program_args/arguments_impl.hpp

@@ -101,8 +101,13 @@ Arguments<Impl>::Arguments(int argc, char const * const * const argv) {
       arguments.insert(arguments.end(), &argv[i + 1], &argv[argc]);
       break;
     } else if (argv[i][0] == '-') {
+      if (auto it = option_name_mapping.find(argv[i]);
+          it != option_name_mapping.end()) {
+        options[it->second].emplace_back(argv[i + 1]);
+      } else {
+        throw NotAnArgumentError(argv[i]);
+      }
       // TODO: Arity
-      options[option_name_mapping.at(argv[i])].emplace_back(argv[i + 1]);
       ++i;
     } else {
       arguments.emplace_back(argv[i]);

+ 6 - 0
include/program_args/exception.h

@@ -14,6 +14,12 @@ public:
       : ProgramArgumentsError(desc + " for argument " + name) {}
 };
 
+class NotAnArgumentError : public ProgramArgumentsError {
+public:
+  NotAnArgumentError(std::string const & name)
+      : ProgramArgumentsError("Unknown argument provided: " + name) {}
+};
+
 class IllegalPositionError : public ProgramArgumentsError {
 public:
   IllegalPositionError(std::string const & desc, size_t index)