Boost logo

Boost :

From: Vladimir Prus (ghost_at_[hidden])
Date: 2005-05-06 03:06:49

Since this was the most requested change for program_options, I though I'd
post specific announcement.

I've committed a change that finally makes
command_line_parser::allow_unregistered to work as expected. Assuming you get
command line like:

   --foo=10 --bar=15 --biz 5 -cd -d10

and registered options are "foo" and "-c", where "-c" takes no value,
parsing that command line will give you the following list of options:

   ("foo", "10")
   ("bar", "15") *
   ("biz", ) *
   ("5") (positional)
   ("-c", )
   ("-d", ) *
   ("-d", "10) *

The 'option' instances corresponding to option marked with '*' will have
'unregistered' member set to true.

With that information it's possible to:
1. Collect all unregistered option as process them separately.
2. Construct a new command line from unregistered options and pass it to some
application. In the above example, reconstructed command like would be

   --bar=15 --biz 5 -d -d10

There are some notes of interest.
First, the option class don't keep the original tokens it was created from.
The unregistered option can technically arrive from user-provided 'additional
parser' where 'original tokens' are not even present.

Second, for 'sticky' short options, like '-cd' above, the library can break
them in parts. Again, in example we get:

   ("-c", )
   ("-d", ) *

The 'c' letter is recognized, and the 'd' letter is not. I find this behaviour
better than marking the entire '-cd' as unrecognised.

Finally, the new functionality might not work nice with long options that
start with a single dash (allow_long_disguise style option):


will be considered as short option '-f' with value 'oo', and never as long
option 'foo'.

Feedback is appreciated!

I was also asked for 'allow_unregistered' support for config file. I agree
this might be good, but given that config file never supported it in any
form, it's clearly a new feature, and will have to wait till 1.33 is

- Volodya

Boost list run by bdawes at, gregod at, cpdaniel at, john at