そのようなコマンドラインでエラーを生成したい:
testprog.exe -u c- action1
ユーザーが「-c」ではなく「c-」とタイプミスしたことに注意してください。しかし、パーサーはこれを単一の -u オプションとして認識します。このような場合はどのように処理すればよいですか?
program_options
位置引数を受け入れないようにライブラリに指示すると、目的の動作が得られます
コードとコンパイル:
macmini:stackoverflow samm$ cat po.cc
#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("Usage");
desc.add_options()
("uninstall,u", "uninstall program")
("custom,c", po::wvalue<std::wstring>(), "specify custom action")
;
po::variables_map vm;
po::command_line_parser cmd_line( argc, argv );
cmd_line.options( desc );
cmd_line.positional( po::positional_options_description() );
try {
po::store( cmd_line.run(), vm );
po::notify(vm);
} catch ( const std::exception& e ) {
std::cerr << e.what() << std::endl;
return -1;
}
return 0;
}
macmini:stackoverflow samm$ g++ po.cc -I /opt/local/include -L/opt/local/lib -lboost_program_options -Wl,-rpath,/opt/local/lib
走る:
macmini:stackoverflow samm$ ./a.out -u c- action1
too many positional options
macmini:stackoverflow samm$ ./a.out -u -c action1
macmini:stackoverflow samm$