c – 解析位置参数

前端之家收集整理的这篇文章主要介绍了c – 解析位置参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑从boost程序选项 examples中采用的以下琐碎程序
#include <boost/program_options.hpp>
#include <boost/version.hpp>

#include <iostream>

int
main( int argc,char** argv )
{
    namespace po = boost::program_options;

    po::options_description desc("Options");

    unsigned foo;
    desc.add_options()
        ("help,h","produce help message")
        ("foo",po::value(&foo),"set foo") 
        ;

    po::variables_map vm;
    try {
        po::store(
                po::parse_command_line( argc,argv,desc ),vm
                );
        po::notify( vm );

        if ( vm.count("help") ) {
            std::cout << desc << "\n";
            std::cout << "boost version: " << BOOST_LIB_VERSION << std::endl;
        }
    } catch ( const boost::program_options::error& e ) {
        std::cerr << e.what() << std::endl;
    }
}

以下行为如预期:

samm$./a.out -h
Options:
  -h [ --help ]         produce help message
  --foo arg             set foo

boost version: 1_44
samm$./a.out --help
Options:
  -h [ --help ]         produce help message
  --foo arg             set foo

boost version: 1_44
samm$./a.out --foo 1
samm$./a.out --asdf
unknown option asdf
samm$

但是,当引入一个位置论证时,我感到非常惊讶,没有被标记错误

samm$./a.out foo bar baz
samm$

为什么boost :: program_options :: too_many_positional_options_error异常不会抛出?

解决方法

当我明确指出不支持位置选项:
const po::positional_options_description p; // note empty positional options
    po::store(
            po::command_line_parser( argc,argv).
                      options( desc ).
                      positional( p ).
                      run(),vm
                      );

我得到预期的行为:

samm$./a.out asdf foo bar
too many positional options
samm$
原文链接:https://www.f2er.com/c/114828.html

猜你在找的C&C++相关文章