p-ranav / argparse

Argument Parser for Modern C++
MIT License
2.72k stars 250 forks source link

Allow setting dynamic sets of argument choices #368

Open tlemo opened 4 months ago

tlemo commented 4 months 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;
}