わかりました、それは未処理の例外でクラッシュします:
Unhandled exception at 0x76dbc41f in test.exe: Microsoft C++ exception: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::unknown_option> > at memory location 0x0018efd8..
基本的にあなたを認識しない-p
ので、ドキュメントを読んで、引数が長い引数になることを期待していることがわかりました。そのため、が必要であり、で動作します--p
。
ここに変更されたソースがあります(コンパイル可能)
#include <boost/program_options.hpp>
#include <iostream>
#include <string>
int main(unsigned int argc, const char** argv)
{
boost::program_options::options_description desc("XXX");
desc.add_options()
("p-arg,p", boost::program_options::value<std::string>(), "pi")
("s", boost::program_options::value<std::string>(), "es");
std::cout << desc << std::endl;
boost::program_options::variables_map vm;
boost::program_options::store(
boost::program_options::parse_command_line(argc, argv, desc), vm);
boost::program_options::notify(vm);
if (vm.count("p-arg"))
std::cout << "p is: " << vm["p-arg"].as<std::string>() << std::endl;
if (vm.count("s"))
std::cout << "s is: " << vm["s"].as<std::string>() << std::endl;
}
認識されないプログラムオプションを処理するには、例外処理try-catch
を行う必要があります。そうしないと、さらにクラッシュする可能性があります。