6 Kasım 2016 Pazar

program_options variables_map 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 parse sonucunu aynı bir map şeklinde kullanabilmemizi sağlar. Sınıfın eksik bir tarafı verilen komut satırının sırasının kaybedilmesi. Eğer sıranın önemi varsa kullanılamaz.

Şöyle yaparız.
po::options_description options;
po::variables_map vm;

options.add_options()
  ("var1", po::value<int>()->required(), "var1");

po::store (po::parse_command_line(argc, argv, config_descriptor), vm);
po::notify (vm);
Sanırım bu sınıf altta boost any kütüphanesini kullanıyor

Constructor
Şöyle yaparız.
po::variables_map vm;
at metodu
Şöyle yaparız.
if (po::vm.count("bar") == 1) {
  std::cout << "bar: " << po::vm.at("bar").as<std::string>() << std::endl;
}
as metodu
as<bool>()
Şöyle yaparız
po::vm.count ("withNoDiffusionTerm") ?
 po::vm ["withNoDiffusionTerm"].as<bool>() : false);
as<int>()
Şöyle yaparız
po::vm ["domainSize"].as<int>());
Şöyle yaparız.
if (po::vm.count ("foo") == 1) {
  std::cout << "foo: " << po::vm.at ("foo").as<int>() << std::endl;
}
as<string>()
Şöyle yaparız
po::vm.count("inputImage") ? po::vm["inputImage"].as<std::string>() : "");
po::vm.count("shape") ? po::vm ["shape"].as<std::string>() : "");
Şöyle yaparız.
if (po::vm.count ("bar") == 1) {
  std::cout << "bar: " << po::vm.at("bar").as<std::string>() << std::endl;
} 
count metodu
Aranılan seçeneğin girilip girilmediğini kontrol edebilmemizi sağlar. Şöyle yaparız.
if (po::vm.count("input")) { 
   std::string my_path = po::vm["input"].as<std::string>();
   boost::filesystem::path file_path (my_path);
   std::cout << "The input path is: " << file_path << std::endl;
}
operator []
at metodu ile aynıdır.  Şöyle yaparız
po::vm.count("inputImage") ? po::vm["inputImage"].as<std::string>() : "");

Hiç yorum yok:

Yorum Gönder