gpt4 book ai didi

c++ - boost::program_options 可以实现这种可重复的选项吗?

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

我有选项 --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(),但是随后,因为每个选项都会存储它们的所有 vector 中的值,我失去了隔行扫描选项所需的顺序。

那么,boost::program_options 可以帮助解决这个问题吗?

编辑

我在这里询问了替代软件推荐:https://softwarerecs.stackexchange.com/questions/31766/

并使用 Poco 回答了它。

最佳答案

假设您可以接受必须在 --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,

关于c++ - boost::program_options 可以实现这种可重复的选项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36973114/

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