Bryan Green wrote:
Steven Mackenzie writes:
Ian McCulloch wrote:
Bryan Green wrote: [snip]
While I'm on the subject, you sometimes see something like the following:
./prog -vvv or ./prog -v -v -v
This would *increment* the verbosity level three times. I can't see how to replicate this in program_options.
This is something I have asked about before on this list, but at the time there was no response. I would be very interested in knowing how to do this using boost::program_options!
One complete solution has already been posted, but just for diversity, settin g a notifier function on the variable involves less typing. Something like
int verbosityLevel; ... verbosityLevel = 0; ... void VerbosityWatcher( bool val ) { ++verbosityLevel; } ... desc.add_options() ("verbose,v", po::bool_switch() ->notifier( &VerbosityWatcher ), "print extra information") ;
Disadvantages are that the value isn't available through vm, the default valu e isn't set by the usual ->default method or constructor option, ... Probably s ome some of those could be coded around.
Personally I think a simple -v 3 is nicer; the -v -v -v style of syntax seems a bit verbose to me :-)
Allowing '-v 3' precludes allowing just '-v', which is the common case.
As for notifier, does it really work that way? I am interested in a way to track multiple occurrences, but I thought the notifier only got called once at the end.
-Bryan
Aren't -vvv and -v -v -v non-standard, and therefore to be deprecated? These smack of smart-arse programming[1] to me. Surely, as has been suggested, the standard approach (which is already supported by program_options) is to do -v <argument> (or --verbose <argument>). If you want to increase the verbosity to 10, just use -v 10, for crying out loud, rather than demanding that the hapless user types -v -v -v -v -v -v -v -v -v -v or -vvvvvvvvvv and then has to check twice to see whether they've put the right number of v's in. In short, IMO, anyone wanting to be too clever by half should not expect Boost to bend over backwards to support them. Paul [1] Non-standard computing term that you won't find in FOLDOC.