c++ - 升压程序选项描述的问题

标签 c++ boost-program-options

这是 boost::program_options 中示例之一的简化​​版本:

#include <boost/program_options.hpp>
namespace po = boost::program_options;

#include <iostream>
#include <iterator>
using namespace std;

int main( int argc, char *argv[ ] )
{
    try {
        int opt;
        po::options_description desc("Allowed options");
        desc.add_options()
            ( "help", "produce help message" )
            ( "optimization", po::value< int >(&opt)->default_value(10), "optimization level" )
            ( "verbose", po::value< int >()->implicit_value( 1 ), "enable verbosity (optionally specify level)"  )
        ;

        po::variables_map vm;
        po::store( po::command_line_parser( argc, argv ).options( desc ).run(), vm );
        po::notify( vm );


        if ( vm.count( "help" ) )
        {
            cout << "Usage: options_description [options]\n";
            cout << desc;
            return 0;
        }

        if ( vm.count( "verbose" ) )
        {
            cout << "Verbosity enabled.  Level is " << vm[ "verbose" ].as< int >() << "\n";
        }
    }
    catch( std::exception& e )
    {
        cout << e.what() << "\n";
        return 1;
    }    
    return 0;
}

当我使用 --help 运行它时,我得到了这个输出:

Usage: options_description [options]
Allowed options:
  --help                   produce help message
  --optimization arg (=10) optimization level
  --verbose [=arg(=1)]     enable verbosity (optionally specify level)

有没有办法去掉选项列中的 = 或可能只是删除默认和隐式参数的显示?

最佳答案

您可以采用 hidden options 的技术提供一组用于解析的选项和另一组用于打印帮助的选项。不过,这将需要您维护选项列表的两份拷贝。

例如,从您当前的 desc 定义开始,然后在其下方添加另一个:

po::options_description display_options("Allowed options");
display_options.add_options()
    ("help", "produce help message")
    ("optimization", po::value<int>(), "optimization level")
    ("verbose", "enable verbosity (optionally specify level)")
    ;

继续使用desc来解析命令行选项:

po::variables_map vm;
po::store(po::command_line_parser(argc, argv).options(desc).run(), vm);
po::notify(vm);

但是使用新的选项描述来显示文档:

if (vm.count("help"))
{
    cout << "Usage: options_description [options]\n";
    cout << display_options; // not desc
    return 0;
}

这应该表明 optimization 有一个参数,但它不会透露它的默认值是什么,也不会承认 verbose 接受任何参数全部。

关于c++ - 升压程序选项描述的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4137131/

相关文章:

C++ boost::program_options 读取与 getopt_long 兼容的参数

c++ - 抽象类的二维数组?

python - 与 ZeroMQ 的双向通信异步

c++ - 使用 `createProcess()` 调用 Webots 时传递参数

c++ - 如何使用 Qt Gui 应用程序编辑 sqlite 中的字段值?

c++ - 根据模板值确定的静态数组大小

c++ - boost::bad_any_cast:使用 boost::any_cast 转换失败

c++ - 如何将 boost options_description 与十六进制输入一起使用?

c++ - 如何在boost::program_options::variable_map中存储数据?

c++ - 可移植代码的程序选项库