#pragma once #include #include "Option.h" namespace commandline { template class SwitchOption: public Option { public: SwitchOption(const QString &name, const QString &description = QString(), const QString &valueName = QString(), const QString &defaultValue = QString(), const QMap &switches=QMap()) : Option(name, description, valueName, defaultValue), _switches(switches) {} SwitchOption(const QStringList &names, const QString &description = QString(), const QString &valueName = QString(), const QString &defaultValue = QString(), const QMap &switches=QMap()) : Option(names, description, valueName, defaultValue), _switches(switches) {} SwitchOption(const QCommandLineOption &other, const QMap &switches) : Option(other), _switches(switches) {} const QMap &getSwitches() const { return _switches; } virtual bool validate(Parser &parser, QString &switch_) override { return hasSwitch(switch_); } bool hasSwitch(const QString &switch_) { return _switches.contains(switch_.toLower()); } void setSwitches(const QMap &_switches) { this->_switches = _switches; } void addSwitch(const QString &switch_, T value=T()) { _switches[switch_.toLower()] = value; } void removeSwitch(const QString &switch_) { _switches.remove(switch_.toLower()); } T & switchValue(Parser & parser) { return _switches[value(parser).toLower()]; } protected: QMap _switches; }; }