我有选项--foo
(简称-f
)和--bar
,需要特殊处理,它们是可重复的,顺序也很重要。因此,对于以下内容:
program --foo 1 --z -f 2 --bar 3 --x --foo 4
我希望能够构建一个能够构建[("foo", 1), ("foo", 2), ("bar", 3), ("foo", 4)]
的键值映射。
请注意这个元组数组的顺序,它与命令行中的顺序相同。我已经丢弃了数组中的非重要选项,但它们可能仍然存在于命令行中。
似乎允许使用boost::program_options
的可重复选项的唯一方法是为任何给定选项调用composing()
,但是,由于每个选项都会将所有值存储在向量中,因此我失去了我需要的顺序隔行扫描选项。
那么,boost::program_options
可以帮助解决这个问题吗?
我在这里要求提供替代软件建议:https://softwarerecs.stackexchange.com/questions/31766/
用Poco回答。
答案 0 :(得分:0)
假设您可以接受在--foo和值之间放置一个等号,这可能会做你想要的:
#include <iostream>
#include <boost/program_options.hpp>
#include <vector>
#include <iterator>
#include <algorithm>
int main(int argc, const char**argv)
{
std::vector<int> foos;
boost::program_options::options_description desc("Command Line Options");
desc.add_options()
("foo,F", boost::program_options::value(&foos)->multitoken(), "integers for foo");
std::cout << desc << std::endl;
boost::program_options::variables_map vm;
boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), vm);
boost::program_options::notify(vm);
std::copy(foos.begin(), foos.end(), std::ostream_iterator<int>(std::cout, ", "));
std::cout << std::endl;
return 0;
}
用命令行调用:
./a.out --foo=1 --foo=2
的产率:
Command Line Options:
-F [ --foo ] arg integers for foo
1, 2,