首页 > 解决方案 > 如何强制 boost program_options 严格检查选项?

问题描述

这是我的最小示例,基本上是从 boost 网站复制的:

#include <boost/program_options.hpp>
#include <iostream>

namespace po = boost::program_options;

int main(int argc, char **argv) {
    po::options_description desc("Test options");
    desc.add_options()              
            ("help", "Print help")          
    ;
    po::variables_map vm;           
    po::store(po::parse_command_line(argc, argv, desc), vm);
    po::notify(vm);

    if (vm.count("help")) {         
            std::cout << desc << std::endl; 
    }

}

当我运行时:

./main --help

它按预期打印帮助。当我运行时:

./main --foo

正如预期的那样,它会引发unknown_option错误。但是当我运行时:

./main foobar

它忽略了参数并且没有引发错误。我没有指定位置参数,所以我希望 boost 也会在这里引发错误。

为什么 boost 会这样表现(我希望有一些我还没有看到的合乎逻辑的原因)?

我能做些什么来强制提升以严格检查提供的选项并在其他任何事情上引发错误?

标签: c++boost

解决方案


推荐阅读