diff --git a/argh.h b/argh.h index b61300f..a986e71 100644 --- a/argh.h +++ b/argh.h @@ -109,11 +109,15 @@ namespace argh parser(int argc, const char* const argv[], int mode = PREFER_FLAG_FOR_UNREG_OPTION) { parse(argc, argv, mode); } + parser(const std::vector& argv, int mode = PREFER_FLAG_FOR_UNREG_OPTION) + { parse(argv, mode); }; + void add_param(std::string const& name); void add_params(std::initializer_list init_list); void parse(const char* const argv[], int mode = PREFER_FLAG_FOR_UNREG_OPTION); void parse(int argc, const char* const argv[], int mode = PREFER_FLAG_FOR_UNREG_OPTION); + void parse(const std::vector& argv, int mode = PREFER_FLAG_FOR_UNREG_OPTION); std::multiset const& flags() const { return flags_; } std::multimap const& params() const { return params_; } @@ -193,15 +197,26 @@ namespace argh ////////////////////////////////////////////////////////////////////////// inline void parser::parse(int argc, const char* const argv[], int mode /*= PREFER_FLAG_FOR_UNREG_OPTION*/) + { + std::vector args; + + // convert to strings + args.resize(static_cast(argc)); + std::transform(argv, argv + argc, args.begin(), [](const char* const arg) { return arg; }); + + parse(args, mode); + } + + ////////////////////////////////////////////////////////////////////////// + + inline void parser::parse(const std::vector& argv, int mode) { // clear out possible previous parsing remnants flags_.clear(); params_.clear(); pos_args_.clear(); - // convert to strings - args_.resize(static_cast(argc)); - std::transform(argv, argv + argc, args_.begin(), [](const char* const arg) { return arg; }); + args_ = argv; // parse line for (auto i = 0u; i < args_.size(); ++i)