I'm just trying to use Boost.Program_options in an application and
during my implementation, it appears a couple of questions:
- Is it possible to introduce more than one "multitoken"
options in command line?
I didn't see any limitation in the documentation but my
sample hereafter seems to prove that yes.
- If the answer to the first question is yes, then how I can
handle this feature?
I seemed that with the older version, 1.32, this feature was
supported?
Thanks in advance.
Best regards,
Marc VIALA
--------------------------------------------------------------
Test Configuration:
--------------------------------------------------------------
PC / WinXP SP2
Visual C++ 7.1
Boost 1.33
--------------------------------------------------------------
Code Example:
--------------------------------------------------------------
// How to use multitoken options in command line?
#include <vector>
#include <iostream>
#include <iterator>
#include
#include
using namespace boost ;
using namespace boost::lambda ;
namespace po = boost::program_options ;
using namespace std ;
int
main(int argc, char* argv[] )
{
string rootDir ;
vector<string> inputList, outputList ;
// Options declaration
po::options_description generic("Generic options") ;
generic.add_options()
("help" , "produce a help message" )
("version" , "output the version number")
;
po::options_description mandatory("Mandatory options");
mandatory.add_options()
("root,r" , po::value<string>(&rootDir)
, "set project root catalog" )
("acq,a" , po::value(&inputList)->multitoken()
, "set list of acquisition catalog#")
("measure,m", po::value(&outputList)->multitoken()
, "set list of measurement catalog#")
;
// Group mandatory & generic options
po::options_description cmdLineOpt("Allowed options") ;
cmdLineOpt.add(generic).add(mandatory) ;
// Simulate command line sample
vector<string> args =
po::split_winmain("-r Test --acq 11 tt 13 --measure 20 21 23");
// Parse command line
po::variables_map vm ;
po::store(po::command_line_parser(args).options(cmdLineOpt).run(),
vm);
po::notify(vm) ;
// Display options & args in command lines
cout << "root args : \n" ;
if( vm.count("root") ) cout << '\t' << vm["root"].as<string>() <<
'\n' ;
cout << "acq args : \n" ;
if( vm.count("acq") ) {
const vector<string>& vs = vm["acq"].as() ;
for_each(vs.begin(), vs.end(),
cout << constant('\t') << _1 << constant('\n')) ;
}
cout << "measure args: \n" ;
if( vm.count("measure") ) {
const vector<string>& vs = vm["measure"].as() ;
for_each(vs.begin(), vs.end(),
cout << constant('\t') << _1 << constant('\n')) ;
}
return 0 ;
}
--------------------------------------------------------------
--------------------------------------------------------------
Output results:
--------------------------------------------------------------
root args :
Test
acq args :
11
tt
13
--measure (it seems to insert also option item w/ its args?)
20
21
23
measure args: