[program_options] additional parser
Have a problem with using additional parser feature:
I want to allow user to use double dashes for short options, so user will
use "-h" or "--h".
But using additional parser the code throws an error about syntax. It seems
there is a bug in additional parser wrapper - in case then my option has no
parameters defined and declared in description it adds an empty value to the
vector of values when additional paser returns pair of strings.
Perhaps there is another way to get what I want, please let me know how to
do it?
Here is an example that illustrates the problem:
#define BOOST_WHATEVER_DYN_LINK
#define BOOST_LIB_DIAGNOSTIC
#include
Alexander Kondratyuk wrote:
Have a problem with using additional parser feature: I want to allow user to use double dashes for short options, so user will use "-h" or "--h". But using additional parser the code throws an error about syntax. It seems there is a bug in additional parser wrapper - in case then my option has no parameters defined and declared in description it adds an empty value to the vector of values when additional paser returns pair of strings.
Perhaps there is another way to get what I want, please let me know how to do it?
I think you're better of using new 'style_parser' interface, which is similar in idea but is a bit more flexible. Here's relevant bits of code: std::vector<option> parseDashDashShort(std::vectorstd::string& cmdline) { std::vector<option> result; string s = cmdline[0]; string str = s.substr( 0, s.find('=') ); if( str.length()==3 && str[0]=='-' && str[1]=='-' && str[2]<='z' && str[2]>='a') { result.push_back(option(str.substr(1), std::vector<string>())); cmdline.erase(cmdline.begin()); } return result; } .... command_line_parser(argc, (char**)args).options(desc).style(style) .extra_style_parser(parseDashDashShort).run(); I've just modified the logic so that empty second element of return value from from additional parser is considered to mean no value, but using empty string to mean 'nothing' is still a bit dirty, so I suggest you consider using the new interface. - Volodya
participants (2)
-
Alexander Kondratyuk
-
Vladimir Prus