C++ boost program_选项:多次使用零参数选项?

C++ boost program_选项:多次使用零参数选项?,c++,boost,C++,Boost,我想知道是否有可能在boost::program_选项中多次使用零参数选项 我有这样的想法: mytool --load myfile --print_status --do-something 23 --print_status 使用一个“print_status”参数就可以很容易地实现这一点,但我不清楚如何两次使用这个选项(在我的例子中,如果多次指定零参数选项,boost会抛出一个异常) 因此,问题是: 是否有任何(简单)的方法可以通过程序选项的开箱即用功能实现这一点? 目前,这似乎是当前

我想知道是否有可能在boost::program_选项中多次使用零参数选项

我有这样的想法:

mytool --load myfile --print_status --do-something 23 --print_status
使用一个“print_status”参数就可以很容易地实现这一点,但我不清楚如何两次使用这个选项(在我的例子中,如果多次指定零参数选项,boost会抛出一个异常)

因此,问题是:

是否有任何(简单)的方法可以通过程序选项的开箱即用功能实现这一点?

目前,这似乎是当前计划选项实施的一个缺点

附言:

过去已经有过类似的问题(都超过四年),但没有找到解决方案:

此线程包含一个解决方案,但它是否有效并不明显,对于这样一个简单的功能来说,它似乎相当复杂:


如果您不需要计算指定选项的次数,这相当简单(如果有点奇怪);只需将变量声明为
vector
,并设置以下参数:

std::vector<bool> example;
// ...
desc.add_options()
    ("example,e",
     po::value(&example)
     ->default_value(std::vector<bool>(), "false")
     ->implicit_value(std::vector<bool>(1), "true")
     ->zero_tokens()
    )
// ...


请注意,与链接问题不同,这不允许额外指定值(例如
--verbose 6
)-如果要执行复杂的操作,则需要编写自定义
值\u semantic
子类,因为Boost的现有语义不支持它。

您想计算指定打印状态的频率,还是只允许它被添加多次?只允许它被添加多次事实上,计数没有那么重要-我正在编写一个类似管道的数据处理应用程序,我希望能够在这两个阶段之间执行零参数处理阶段(如“打印状态”),时间任意。第一个示例对我进行了一些修改:
po::value()->默认值(std::vector(),“false”)->隐式值(std::vector(1),“true”)->零令牌()
struct counter { int count = 0; };
void validate(boost::any& v, std::vector<std::string> const& xs, counter*, long)
{
    if (v.empty()) v = counter{1};
    else ++boost::any_cast<counter&>(v).count;
}