Hi,
I am trying to use program_options to parse suboptions:
Command –S “-a 1 –b test –c 1.2”
(the suboptions in –S are to be passed into other programs)
Using the example source code, I tried something like the code below,
but get the following error The argument (‘ 1’) for option ‘—TestA’ is
invalid. Apparently the space between –a and 1 is treated as part of the
argument and thus will not convert to an integer.
I tried at the top argument level (e.g. command –M 1) and it works as
expected, so something about creating the vector of suboptions is
confusing program_options.
Any suggestions? Thanks very much.
options_description desc("Allowed options");
desc.add_options()("subopt,S",value<string>(),"Sub Options");
variables_map vm; store(command_line_parser(ac,
av).options(desc).run(), vm);
vm.notify();
if (vm.count("subopt")) { string
substring=vm["subopt"].as<string>();
boost::regex re("\\s+(?=-)");
boost::sregex_token_iterator i(substring.begin(),
substring.end(), re, -1);
boost::sregex_token_iterator j;
vector<string> splitResults;
copy(i,j,back_inserter(splitResults));
int ta; string tb; float tc;
options_description subopt_desc("Suboptions");
subopt_desc.add_options() ("TestA,a",
value<int>(&ta)->default_value(0), "integer")
("TestB,b",value<string>(&tb),"string")
("TestC,c",value<float>(&tc), "float") ;
variables_map subopt_vm;
store(command_line_parser(splitResults).options(subopt_desc).run(),
subopt_vm);
subopt_vm.notify();
cout<<"a="<