Boost logo

Boost :

Subject: Re: [boost] program_options: Support for open-end options
From: ST (smntov_at_[hidden])
Date: 2013-01-17 10:33:12


On Fri, 2012-12-28 at 00:43 +1100, Joshua Boyce wrote:
> On Thu, Dec 27, 2012 at 4:56 AM, ST <smntov_at_[hidden]> wrote:
>
> > Hi,
> >
> > It would be great to implement support for open-end options, something
> > like that:
> >
> > item_1 = 23
> > item_2 = 45
> > ...
> > item_N = 465
> >
> > The idea is to to be able to provide following input:
> >
> > configOptions.add_options()
> > ("item_", value<int>(), "items");
> >
> > now if add_options() sees a key that ends with a "_" it accepts all
> > options with keys that start with item_, no matter what comes after it,
> > and treat all of them as int . Nesting should also be possible - like
> > this: "item_.subitem_.subsubitem_" (item_3.subitem_FOO.subsubitem_34
> > should be a valid option key).
> > I can try to implement it, however only if it will have a chance to be
> > merged into the boost library. Whom should I contact regarding this?

I checked this and indeed everything worked just fine. Following
declaration worked as expected

 configOptions.add_options()
         ("item_*", value<int>(), "items");

and recognized item_1, item_3, etc, while rejecting unknown options. Its
really sad, that this feature is not mentioned in the documentation - I
saw numerous people asking for it on different forums over last years.
And also here there were people who need it.

Well now the question is, how can I write a custion validate function
that will populate a map, like this:

map<string, int> itemsMap;
options_description generic("Generic options");
generic.add_options()
        ("item_*",value<map<string, int>>(&itemsMap)->multitoken(), "items")
;

My question is - how do I get the key of the option from within
validate() function?

Thanks in advance,
Simone


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk