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