29 Mayıs 2017 Pazartesi

program_options

Giriş
Şu satırı dahil ederiz.
#include <boost/program_options.hpp>
Daha kolay kullanmak için şöyle yaparız. Bu kütüphane ile json parse etmek mümkün değil
namespace po = boost::program_options;
Kullanım
1. options_description nesnesi ile seçenekler doldurulur
2. command_line_parser nesnesi çalıştırılır ve parsed_options nesnesi elde edilir.
3. Anlaşılmayan seçenekler collect_unrecognized() çağrısı ile elde edilir.
4. Seçenekerl store() ve notify() çağrıları ile variables_map nesnesine doldurulur
5. variables_map nesnesine kullanılarak seçeneklere erişilir.

Örnek
Şöyle yaparız
#include <boost/program_options.hpp>
namespace po = boost::program_options;

int main(int argc, char **argv) {
  // Declare the supported options.
  po::options_description desc("Allowed options");
  desc.add_options()
    ("help,h",                       "produce help message")
    ("parents,p", po::bool_switch(), "make parent directories as needed")
    ("verbose,v", po::bool_switch(), "print a message for each created directory");

  const po::parsed_options parsed = po::command_line_parser(argc, argv)
    .options(desc).allow_unregistered().run();
  const std::vector<std::string> unrecognized =
          collect_unrecognized(parsed.options, po::include_positional);
  po::variables_map vm;
  po::store(parsed, vm);
  po::notify(vm);
  
  if (vm.count("help") || argc <= 1) {
    std::cout << desc;
    return 1;
  }

  for (const auto &opt : unrecognized) {
    ...
  }
options_description Sınıfı
options_description Sınıfı yazısına taşıdım.

Custom Validator
Custom Validator yazısına taşıdım.

positional_options_description Sınıfı
positional_options_description Sınıfı yazısına taşıdım.

variables_map Sınıfı
variables_map Sınıfı yazısına taşıdım.

command_line_parser Sınıfı
command_line_parser Sınıfı yazısına taşıdım.

parsed_options Sınıfı
Bu sınıf parse işleminin sonucunu saklar.
Constructor
Şöyle yaparız.
po::parsed_options parsed =
  po::command_line_parser(argc, argv).options(desc).allow_unregistered().run();
store metodu
Bu metod ile verilen komut satırı parse edilerek variables_map sınıfına doldurulur.  Şöyle yaparız.
po::variables_map vm;
po::parsed_options parsed = ...;
po::store (parsed, vm);
Genellikle parsed_options nesnesi es geçilerek direkt parse_command_line çağrısının sonucu kullanılır. Şöyle yaparız.
//command line arguments
variables_map vm;

options_description desc = ...;
...
store (parse_command_line (argc, argv, desc), vm);
notify(vm);
config_file_iterator Sınıfı
config_file_iterator Sınıfı yazısına taşıdım.

notify metodu
notify metodu yazısına taşıdım.

collect_unrecognized metodu
Şöyle yaparız.
po::parsed_options parsed = ...;
auto command = po::collect_unrecognized(parsed.options, po::include_positional);
  std::cout << "bar: " << bar << ", command:";
for (const auto& c : command) std::cout << " " << c;
  std::cout << " " << c

Hiç yorum yok:

Yorum Gönder