我需要对程序使用以下语法:
myprogram config.ini --option1 value --option2 value2
我正在使用以下内容:
namespace po = boost::program_options;
po::options_description desc("Allowed options");
desc.add_options()
("option1", po::value<std::string>()->required(), "option 1")
("option2", po::value<uint16_t>()->required(), "option 2")
("help", "this message");
po::variables_map opts;
po::store(po::command_line_parser(argc, argv).options(desc).run(), opts);
if (opts.count("help")) {
show_help(desc);
return 0;
}
po::notify(opts);
可以 Boost.Program_options 用于捕获第一个参数(config.ini
)吗?或者没有选项说明符的任何值?
答案 0 :(得分:1)
根据documentation,这些可以使用位置参数来处理。
您可以在指定位置选项下找到另一个不错的示例here。
如果我了解您的预期功能,请按以下步骤将其汇总到上面的示例中。
namespace po = boost::program_options;
po::options_description desc( "Allowed options" );
desc.add_options( )
( "option1", po::value<std::string>( )->required( ), "option 1" )
( "option2", po::value<uint16_t>( )->required( ), "option 2" )
// this flag needs to be added to catch the positional options
( "config-file", po::value<std::string>( ), ".ini file" )
( "help", "this message" );
po::positional_options_description positionalDescription;
// given the syntax, "config.ini" will be set in the flag "config-file"
positionalDescription.add( "config-file", -1 );
po::variables_map opts;
po::store(
po::command_line_parser( argc, argv )
.options( desc )
// we chain the method positional with our description
.positional( positionalDescription )
.run( ),
opts
);
if (opts.count( "help" ))
{
show_help( desc );
return 0;
}
po::notify( opts );