gpt4 book ai didi

c++ - 使用 boost program-options 的无效选项值异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:35:31 30 4
gpt4 key购买 nike

我有一个使用 boost v1.45.0 程序选项的 Visual Studio 2008 C++ 应用程序。

我希望能够解析如下所示的命令行选项: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 .

我需要做什么才能使这项工作按预期进行?

谢谢,保罗H

最佳答案

typedef std::vector<int>作为boost::program_options::value_semantic无法按您希望的方式工作,因为 vector有一个special meaning到程序选项库:

The library provides special support for vectors -- it will be possible to specify the option several times, and all specified values will be collected in one vector.

这意味着像这样的描述

typedef std::vector< int > IDList;
po::options_description desc( "Foo options" );
desc.add_options()
("id,x", po::value< IDList >(), "list of IDs")
;

合并成一个 std::vector<int>给定以下命令行

a.out --id 1 --id 2 --id 3 --id 4

结果将是 std::vector有四个元素。您需要定义特定类型才能使用自定义验证器,struct IDListcorrect approach .

关于c++ - 使用 boost program-options 的无效选项值异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5120303/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com