30 Ocak 2018 Salı

program_options command_line_parser Sınıfı

Giriş
Bu sınıf parse işlemini gerçekleştirir. Bu sınıfın kardeşi şöyledir.
po::wcommand_line_parser parser(args);
Kullanım
Nihai amacı run metodunun çağrılmasıdır. Şöyle yaparız.
auto parsedOptions =
  po::command_line_parser (argc, argv).options(desc).run();
Örnek
Şöyle yaparız.
po::options_description desc = ...;
po::positional_options_description p = ...;

po::variables_map parameters;
po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(),
  parameters);
po::notify(parameters);
Örnek
Bu sınıf yerine direkt parse_command_line() metodu kullanılabilir. Şöyle yaparız.
//command line arguments
variables_map vm;

options_description desc = ...;
...
store  (parse_command_line (argc, argv, desc), vm);
notify (vm);
Constructor - argc + argv
Şöyle yaparız.
po::command_line_parser parser (argc, argv);
Sınıf argv'nin kopyasını alır. İçi şöyledir.
template<class charT>
basic_command_line_parser<charT>::
basic_command_line_parser(int argc, const charT* const argv[])
: detail::cmdline(
  // Explicit template arguments are required by gcc 3.3.1 
  // (at least mingw version), and do no harm on other compilers.
  to_internal(detail::make_vector<charT, const charT* const*>(
    argv+1, argv+argc+!argc))),
  m_desc()
{}
Constructor - std::vector<std::string>
Şöyle yaparız.
std::vector<std::wstring> args { L"--silent=no" };
po::wcommand_line_parser parser(args);
allow_unregister metodu
Şöyle yaparız.
parser.allow_unregistered ();
options metodu
Şöyle yaparız.
parser.options (desc);
positional metodu
Şöyle yaparız.
po::positional_options_description p = ...;
parser.positional (p);
run metodu
Şöyle yaparız.
po::parsed_options parsed = parser.run ();
Bu metod exception fırlatabilir. Exception şöyledir.
 what():  unrecognised option '--help'
style metodu
Örnek
Şöyle yaparız.
const auto windows_style =
  po::command_line_style::allow_long |
  po::command_line_style::allow_short |
  po::command_line_style::allow_dash_for_short |
  po::command_line_style::long_allow_next |
  po::command_line_style::short_allow_next |
  po::command_line_style::case_insensitive;

po::options_description desc;
...
auto args = po::command_line_parser(argc, argv)
  .options(desc).
  .style(windows_style)
  .run();
po::store(args, m_vm);
po::notify(m_vm);
Örnek
Şöyle yaparız.
std::vector<std::wstring> args { L"--silent=no" };
po::wcommand_line_parser parser(args);
po::wparsed_options parsedOptions = parser.options(desc)
  .style(po::command_line_style::default_style).run();
Örnek
Şöyle yaparız.
options_description desc = ...;
...
command_line_parser parser{argc, argv};
parser.options(desc).allow_unregistered()
  .style(command_line_style::default_style | command_line_style::allow_slash_for_short);

Hiç yorum yok:

Yorum Gönder