diff --git a/src/cam/options.cpp b/src/cam/options.cpp index 83601270..f48bd1fc 100644 --- a/src/cam/options.cpp +++ b/src/cam/options.cpp @@ -12,6 +12,32 @@ #include "options.h" +template +bool OptionsBase::valid() const +{ + return !values_.empty(); +} + +template +bool OptionsBase::isSet(const T &opt) const +{ + return values_.find(opt) != values_.end(); +} + +template +const std::string &OptionsBase::operator[](const T &opt) const +{ + return values_.find(opt)->second; +} + +template +void OptionsBase::clear() +{ + values_.clear(); +} + +template class OptionsBase; + void OptionsParser::addOption(int opt, const char *help, const char *name, OptionArgument argument, const char *argumentName) { @@ -166,27 +192,3 @@ void OptionsParser::usage() } } } - -OptionsParser::Options::Options() -{ -} - -bool OptionsParser::Options::valid() const -{ - return !values_.empty(); -} - -bool OptionsParser::Options::isSet(int opt) const -{ - return values_.find(opt) != values_.end(); -} - -const std::string &OptionsParser::Options::operator[](int opt) const -{ - return values_.find(opt)->second; -} - -void OptionsParser::Options::clear() -{ - values_.clear(); -} diff --git a/src/cam/options.h b/src/cam/options.h index 6d1b12d2..2bf1f160 100644 --- a/src/cam/options.h +++ b/src/cam/options.h @@ -28,21 +28,25 @@ struct Option { bool hasLongOption() const { return name != nullptr; } }; +template +class OptionsBase +{ +public: + bool valid() const; + bool isSet(const T &opt) const; + const std::string &operator[](const T &opt) const; + +private: + friend class OptionsParser; + std::map values_; + void clear(); +}; + class OptionsParser { public: - class Options { - public: - Options(); - - bool valid() const; - bool isSet(int opt) const; - const std::string &operator[](int opt) const; - - private: - friend class OptionsParser; - std::map values_; - void clear(); + class Options : public OptionsBase + { }; void addOption(int opt, const char *help, const char *name = nullptr,