p-ranav / argparse

Argument Parser for Modern C++
MIT License
2.59k stars 244 forks source link

Allow setting dynamic sets of argument choices #368

Open tlemo opened 1 month ago

tlemo commented 1 month ago

Currently, the .choices(...) method require passing the list of choices as individual arguments. This works well when the list of choices is known statically, but if the list is dynamic (ex. computed into a std::vector<T>), setting the choices becomes unnecessarily verbose (you'd have to loop over the values and call .add_choice() for each one).

Unfortunately, the variadic .choices(...) interface prevents overloading, so the suggestion is to add a new method along the lines of:

template<class T>
Argument& choices_list(const T& list) {
  for (const auto& v : list) {
   add_choice(v);
  }
  return *this;
}