У меня есть приложение Visual Studio 2008 C ++, использующее параметры программы boost v1.45.0.
Я хотел бы иметь возможность проанализировать параметр командной строки, который выглядит следующим образом: foo.exe -x 1,2, 4-7
так, что онвыдает std::vector< int >
со значениями [1, 2, 4, 5, 6, 7].Итак, я написал собственный валидатор:
typedef std::vector< int > IDList;
void validate( boost::any& v, const std::vector< std::string >& tokens, IDList*, int )
{
// Never gets here
}
int _tmain( int argc, _TCHAR* argv[] )
{
IDList test_case_ids;
po::options_description desc( "Foo options" );
desc.add_options()
("id,x", po::value< IDList >(), "Specify a single ID or a range of IDs as shown in the following command line: foo.exe -x10,12, 15-20")
;
po::variables_map vm;
try
{
po::store( po::parse_command_line( argc, argv, desc ), vm );
po::notify( vm );
}
catch( const std::exception& e)
{
std::cerr << e.what() << std::endl;
std::cout << desc << std::endl;
return 1;
}
return 0;
}
Но я так и не дошел до своего специального кода валидатора.Я всегда получаю исключение в parse_command_line
с сообщением: in option 'id': invalid option value
.
Что мне нужно сделать, чтобы сделать эту работу по желанию?
Спасибо, PaulH