12 Aralık 2016 Pazartesi

program_options options_description Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/program_options.hpp>
Kolay kullanım için şu satırı dahil ederiz.
namespace po = boost::program_options;
Bu sınıf parametre olarak verilen string'leri kopyalar. İçin şöyledir.
std::string m_short_name, m_long_name, m_description;
// shared_ptr is needed to simplify memory management in
// copy ctor and destructor.
shared_ptr<const value_semantic> m_value_semantic;

Komut Satırı
Parametre almayan seçenek için şöyle yaparız.
po::options_description desc("Allowed options");
  desc.add_options()
    ("compression", po::value<int>(), "set compression level")
  ;
Bu durumda komut satırından şöyle kullanırız. -- karekterlerinden sonra seçenek ismi, sonra boşluk ve sonra parametre değeri
./main --compression 1  
Şöyle de yapılabilir.
./main --compression="1"
Constructor
Bir string vererek şöyle yaparız.
po::options_description desc ("Options");
Şöyle de yapılabilir.
options_description desc {"Program usage"};
Şöyle de yapılabilir.
po::options_description desc ("Allowed options");
add metodu - options_description
Şöyle yaparız.
po::options_description generic = ...;
po::options_description visible = ...;
visible.add (generic);
Şöyle yaparız.
po::options_description desc("Allowed options");
...

// Hide the `files` options in a separate description
po::options_description desc_hidden("Hidden options");
...
// This description is used for parsing and validation
po::options_description cmdline_options;
cmdline_options.add (desc).add(desc_hidden);

// And this one to display help
po::options_description visible_options;
visible_options.add (desc);
add_options metodu
Bir options_description_easy_init nesnesi yaratır. operator() metodunun kolay kullanılabilmesini sağlar.
operator << metodu
Eğer istenirse bu sınıf string'e çevrilebilir. Şöyle yaparız
po::variables_map options;
po::options_description optionsDesc;
//...
if(options.count("help"))
{
  cerr << optionsDesc << endl;
}
Yardımcı Sınıf
Bound value kullanmak için şöyle yaparız. Bir struct tanımlarız.
struct Options {
  std::string input, output, directory;
  int points;
};
Bunu bir metoda geçeriz.
Options cmdoptions1;
bool result = process_command_line(argc, argv, cmdoptions1);
Metodun içi şöyledir.
bool process_command_line(int argc, char **argv, Options &opt) {

  if (argv == nullptr) {
    return false;
  }

  try {
    po::options_description desc("Program Usage");
    desc.add_options()
      ("halp, h", "Halp!")
      ("input, i", po::value<std::string>(&opt.input), "Specify Input")
      ("output, o", po::value<std::string>(&opt.output) ,"Specify Output")
      ("points, p", po::value<int>(&opt.points),  "% of reduced points")
      ("directory, d", po::value<std::string>(&opt.directory)->required(), "set");

      po::variables_map vm;
      po::store(po::parse_command_line(argc, argv, desc), vm);
      po::notify(vm);

      if (vm.count("help")) {
        std::cout << desc << std::endl;
        return false;
      }

  } catch (std::exception &e) {
    std::cerr << "Error: " << e.what() << std::endl;
    return false;
  } catch (int e) {
    std::cerr << "Unknown error!" << e << std::endl;
    return false;
  }

  return true;
}



Hiç yorum yok:

Yorum Gönder