2016-07-24 11 views
0

boost::program_optionsを使用しているときに、validation_errorを捨てた後、エラーメッセージに完全なオプション名が表示されません。boost :: program_options:完全なオプション名とより多くの有益な情報でvalidation_errorを作成する方法

私は次の単純なソースコードをg++ -std=c++11 test.cpp -lboost_program_optionsでコンパイルしました。このプログラムには、またはbのいずれかに設定されているはずの--hello-worldという有効なコマンドラインオプションが1つあります。 ./a.out --hello-world aは有効ですが、./a.out --hello-world cは無効です。次に、無効なオプション(たとえば、./a.out --hello-world c)でコードを実行します。

the argument for option 'world' is invalid 

しかし、私はオプション名がhello-worldことを期待すると、無効な値も表示する必要があります。エラーメッセージは、次のようなものです。私はこれを変更する方法はありますか?

#include <boost/program_options.hpp> 

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

    char v; 
    po::options_description desc("Options"); 
    desc.add_options() 
     ("hello-world", po::value<>(&v)->default_value('a')->notifier(
      [](char x) 
      { 
       if (x != 'a' && x != 'b') 
        throw po::validation_error(
         po::validation_error::invalid_option_value, 
         "hello-world", std::string(1, x)); 
      }), 
     "An option must be set to either 'a' or 'b'"); 

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

     po::notify(vm); 
    } 
    catch (const std::exception& e) 
    { 
     std::cerr << e.what() << std::endl; 

     return 1; 
    } 

    return 0; 
} 

答えて

1

「hello-world」のオプション名が無効です。オプション名にダッシュ " - "を使用することはできません。

通常、メッセージは次のようになります。

the argument ('32768') for option '--the_int16' is invalid 
+0

公式の例をここでは '入力-file'は、そのオプション名でのダッシュを使用しています。http://www.boost.org/doc/libs/1_63_0/ doc/html/program_options/tutorial.html#idp523371328 – xuhdev

関連する問題