これ(バージョン1.52.0)を私のアプリに統合してきましたが、上記のように問題に遭遇しました。
添付された例では、例外what()メソッドは常に%canonical_option%タグをそのまま保持しており、オプション名に置き換えられていません。
私はVS2008を使用しており、Unicode(オプション'none')を無効にし、プロジェクトから他のすべてのファイルを削除しました。これは、main.cppファイル内のこのコードのみです。
または、これをすべて間違って、正しいパラメータ名で例外メッセージをフォーマットするために呼び出す必要がある何かがありますか?
#include <boost/program_options.hpp>
namespace po = boost::program_options;
using namespace std;
int main(int argc, char* argv[])
{
try {
po::options_description optionalParams("optional");
optionalParams.add_options()
("log_severity,l", po::value<int>()->required(), "Minimum severity logging level")
("log_file,g", po::value<string>(), "Full path to log file")
;
po::variables_map optMap;
po::parsed_options parsed = po::command_line_parser(argc, argv)
.options(optionalParams)
.allow_unregistered()
.run();
po::store(parsed, optMap);
po::notify(optMap);
}
catch(po::error e)
{
cout << e.what();
return 0;
}
return 0;
}