gpt4 book ai didi

c++ - boost program_options 接受最后一个标志后的所有值

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:01 28 4
gpt4 key购买 nike

有没有办法收集 boost::program_options 指定参数后的所有值?不过,我需要注意两个注意事项,我需要接受无法识别的参数,并且我需要接受可能包含破折号的值。我试过使用 command_line_parser 与 parse_command_line 进行比较,我可以得到无法识别的值或包含破折号的值,但不能同时得到两者。

例子:./myprog Ignore1 Ignore2 --Accept 1 --AlsoAccept 2 --AcceptAll 1 2 -3 4

我并不关心验证 --AcceptAll 是否是最后传递的标志;我只是在寻找为该标志之后的所有内容返回字符串 vector 的逻辑。

最佳答案

你试过了吗positional options

#include <boost/program_options.hpp>

#include <boost/foreach.hpp>

#include <iostream>
#include <string>

namespace po = boost::program_options;

int
main( unsigned int argc, char** argv )
{
std::string foo;
std::vector<std::string> extra;
po::options_description desc;
desc.add_options()
("foo", po::value<std::string>(&foo), "some string")
("extra-options", po::value(&extra), "extra args" )
;

po::positional_options_description p;
p.add("extra-options", -1);

po::variables_map vm;
po::store(
po::command_line_parser(argc, argv).
options(desc).
positional(p).
run(),
vm);
po::notify(vm);

BOOST_FOREACH( const std::string& i, extra ) {
std::cout << i << std::endl;
}

return 0;
}

示例 session

samm@macmini ~> ./a.out --foo bar far hello world how are you
far
hello
world
how
are
you
samm@macmini ~>

关于c++ - boost program_options 接受最后一个标志后的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3363762/

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