boost :: program_options:如何使用完整的选项名称进行validation_error并提供更多信息

时间:2016-07-24 19:38:09

标签: c++ boost boost-program-options

当我使用boost::program_options时,在抛出validation_error后,错误消息不会显示完整的选项名称。

我有以下简单示例源代码,使用g++ -std=c++11 test.cpp -lboost_program_options编译。该程序有一个有效的命令行选项:--hello-world,应该设置为ab,例如./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;
}

1 个答案:

答案 0 :(得分:1)

您的选项名称无效“hello-world”。选项名称不能包含短划线“ - ”。

通常情况下,消息如下:

the argument ('32768') for option '--the_int16' is invalid