diff options
| author | Taylor C. Richberger <Taywee@gmx.com> | 2016-05-01 11:05:34 -0600 | 
|---|---|---|
| committer | Taylor C. Richberger <Taywee@gmx.com> | 2016-05-01 11:05:34 -0600 | 
| commit | 86bba8d0915823f402e3d827ada088ca788bd616 (patch) | |
| tree | 8a62637a72151adf27f9f0769f7a77ee97c4dc5c | |
| parent | more fleshing out (diff) | |
| download | args.hxx-86bba8d0915823f402e3d827ada088ca788bd616.tar.xz | |
Remove variadic arguments because initializer lists don't forward
| -rw-r--r-- | args.hxx | 37 | 
1 files changed, 23 insertions, 14 deletions
| @@ -23,8 +23,8 @@ namespace args      class Matcher      {          private: -            std::vector<char> shortOpts; -            std::vector<std::string> longOpts; +            const std::vector<char> shortOpts; +            const std::vector<std::string> longOpts;          public:              // Specify short and long opts separately as iterators @@ -37,9 +37,23 @@ namespace args              // Specify short and long opts separately as iterables              template <typename Short, typename Long>              Matcher(Short &&shortIn, Long &&longIn) : -                Matcher(std::begin(shortIn), std::end(shortIn), std::begin(longIn), std::end(longIn)) +                shortOpts(std::begin(shortIn), std::end(shortIn)), longOpts(std::begin(longIn), std::end(longIn))              {} +            // Specify short and long opts as initializer lists +            template <typename Short, typename Long> +            Matcher(const std::initializer_list<Short> &shortIn, const std::initializer_list<Long> &longIn) : +                shortOpts(std::begin(shortIn), std::end(shortIn)), longOpts(std::begin(longIn), std::end(longIn)) +            {} + +            Matcher(const Matcher &other) : shortOpts(other.shortOpts), longOpts(other.longOpts) +            {} + +            Matcher(Matcher &&other) : shortOpts(std::move(other.shortOpts)), longOpts(std::move(other.longOpts)) +            {} + +            ~Matcher() {} +              bool Match(const char opt) const              {                  return std::find(shortOpts.begin(), shortOpts.end(), opt) != shortOpts.end(); @@ -64,12 +78,12 @@ namespace args              virtual Base *Match(const std::string &arg) = 0;              virtual Base *Match(const char arg) = 0; -            virtual bool Matched() const +            virtual bool Matched() const noexcept              {                  return matched;              } -            operator bool() const +            operator bool() const noexcept              {                  return matched;              } @@ -137,7 +151,7 @@ namespace args                  return sum;              } -            virtual bool Matched() const override +            virtual bool Matched() const noexcept override              {                  return validator(children.size(), MatchedChildren());              } @@ -274,20 +288,15 @@ namespace args      class Flag : public Base      {          private: -            Matcher matcher; +            const Matcher matcher;          public: -            //template <typename ... Types> -            //Flag(std::string help, Types ...args): matcher(args...) {} - -            template <typename ... Types> -            Flag(ArgumentParser &parser, std::string help, Types&& ...args): matcher(args...) +            Flag(ArgumentParser &parser, std::string help, const Matcher &matcher): matcher(matcher)              {                  parser.Add(*this);              } -            template <typename Short, typename Long> -            Flag(ArgumentParser &parser, std::string help, const std::initializer_list<Short> &shortIn, const std::initializer_list<Long> &longIn): matcher(shortIn, longIn) +            Flag(ArgumentParser &parser, std::string help, Matcher &&matcher): matcher(std::move(matcher))              {                  parser.Add(*this);              } | 
