[Boost.Program_options] some trouble w/ multitoken()?
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 <boost/program_options.hpp> #include <boost/lambda/lambda.hpp> 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<vector<string> >(&inputList)->multitoken() , "set list of acquisition catalog#") ("measure,m", po::value<vector<string> >(&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<vector<string> >() ; 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<vector<string> >() ; 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:
participants (1)
-
Marc VIALA