diff --git a/include/CLI/Option.hpp b/include/CLI/Option.hpp index 76210cd1..6061b39a 100644 --- a/include/CLI/Option.hpp +++ b/include/CLI/Option.hpp @@ -83,6 +83,29 @@ template class OptionBase { /// The status of the multi option policy MultiOptionPolicy get_multi_option_policy() const { return multi_option_policy_; } + + // Shortcuts for multi option policy + + /// Set the multi option policy to take last + CRTP *take_last() { + CRTP *self = static_cast(this); + self->multi_option_policy(MultiOptionPolicy::TakeLast); + return self; + } + + /// Set the multi option policy to take last + CRTP *take_first() { + CRTP *self = static_cast(this); + self->multi_option_policy(MultiOptionPolicy::TakeFirst); + return self; + } + + /// Set the multi option policy to take last + CRTP *join() { + CRTP *self = static_cast(this); + self->multi_option_policy(MultiOptionPolicy::Join); + return self; + } }; class OptionDefaults : public OptionBase { @@ -92,7 +115,7 @@ class OptionDefaults : public OptionBase { // Methods here need a different implementation if they are Option vs. OptionDefault /// Take the last argument if given multiple times - OptionDefaults *multi_option_policy(MultiOptionPolicy value) { + OptionDefaults *multi_option_policy(MultiOptionPolicy value = MultiOptionPolicy::Throw) { multi_option_policy_ = value; return this; } @@ -307,7 +330,7 @@ class Option : public OptionBase