gpt4 book ai didi

c++ - boost::program_options 值 vector 与 zero_token

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:13:09 24 4
gpt4 key购买 nike

我正在尝试使用 boost::program_options 解析以下语法:

a)
$ a.out
verbosity: 0

b)
$ a.out -v
verbosity: 1

c)
$ a.out -v -v
verbosity: 2

d)
$ a.out -vv
verbosity: 2

e) (optional)
$ a.out -v3
verbosity: 3

到目前为止我的计划:

#include <iostream>
#include <boost/program_options.hpp>
namespace po = boost::program_options;

int main(int argc, char *argv[])
{
po::options_description desc;
desc.add_options()
("verbose,v", po::value<int>(), "verbose");
po::variables_map vm;
po::store(po::command_line_parser(argc, argv).options(desc).run(), vm);
po::notify(vm);

std::cout << "verbosity: " << vm["verbose"].as<int>() << std::endl;

return 0;
}

这仅适用于 e)。如果我将其更改为:

po::value<int>()->default_value(0)

它适用于 a) 和 e)。与

po::value<int>()->default_value(0)->implicit_value(1)

它适用于 a)、b) 和 e)。

如何让它解析上述所有情况?

我想我需要一些值 vector 与 zero_tokens() 的组合,但我似乎无法让它工作。

最佳答案

要获得 -v 参数的数量,请使用 vm["verbose"].count。当然,当与 vm["verbose"].as<>() 方法结合使用时,这会导致一些奇怪的结果。

要真正做您想做的事,您可能必须为该选项编写自己的解析方法。该函数看起来像:

std::pair<std::string, std::string> verbosity_count(const std::string& s)
{
if(s.find("-v") || s.find("--verbose"))
{
// process the verbosity count (this will require a static verbosity count var)
return std::make_pair("-v", value as string);
}
else
{
return std::make_pair(std::string(), std::string());
}
return std::make_pair(std::string(), std::string());
}

您可以通过 extra_parser() 方法将其附加到命令行解析器(有关详细信息,请参阅 boost 程序选项文档,它又长又乱)。

关于c++ - boost::program_options 值 vector 与 zero_token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5486753/

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