1

これは、boost::program_optionsの例の1つの簡略版です。

#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)

オプション列の=を削除する方法はありますか、それともデフォルトおよび暗黙の引数の表示を削除する方法はありますか?

4

2 に答える 2

1

組み込みでない場合は、ブーストヘッダーの内容に基づいoptions_descriptionて独自に適応および実装できます。operator<<

printメソッドを使用してこれを行うことができる場合があります。

operator<<printあなたがあなた自身のafaiが見ることができるようにただ電話をかけてください。

于 2010-11-09T18:39:35.270 に答える
1

非表示のオプションの手法を適応させて、解析用のオプションのセットとヘルプの印刷用のオプションのセットを提供できます。ただし、これにはオプションリストのコピーを2つ保持する必要があります。

たとえば、現在の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引数を受け入れることはまったく認識されません。

于 2010-11-09T21:40:31.017 に答える