当我使用boost::program_options
时,在抛出validation_error
后,错误消息不会显示完整的选项名称。
我有以下简单示例源代码,使用g++ -std=c++11 test.cpp -lboost_program_options
编译。该程序有一个有效的命令行选项:--hello-world
,应该设置为a
或b
,例如./a.out --hello-world a
有效但./a.out --hello-world c
无效。然后,使用无效选项执行代码,例如./a.out --hello-world c
。错误消息如下所示:
the argument for option 'world' is invalid
但我希望选项名称为hello-world
,并且还应显示无效值。有什么方法可以改变这个吗?
#include <boost/program_options.hpp>
int main(int argc, const char** argv)
{
namespace po = boost::program_options;
char v;
po::options_description desc("Options");
desc.add_options()
("hello-world", po::value<>(&v)->default_value('a')->notifier(
[](char x)
{
if (x != 'a' && x != 'b')
throw po::validation_error(
po::validation_error::invalid_option_value,
"hello-world", std::string(1, x));
}),
"An option must be set to either 'a' or 'b'");
try
{
po::variables_map vm;
po::store(po::command_line_parser(argc, argv). options(desc).run(), vm);
po::notify(vm);
}
catch (const std::exception& e)
{
std::cerr << e.what() << std::endl;
return 1;
}
return 0;
}
答案 0 :(得分:1)
您的选项名称无效“hello-world”。选项名称不能包含短划线“ - ”。
通常情况下,消息如下:
the argument ('32768') for option '--the_int16' is invalid