boost
कार्यक्रम के विकल्प को बढ़ावा देना
खोज…
मूल उपयोग
बूस्ट प्रोग्राम विकल्प कमांड लाइन तर्कों को पार्स करने और संभालने का एक सरल और सुरक्षित तरीका प्रदान करता है।
#include <boost/program_options.hpp>
#include <string>
#include <iostream>
int main(int argc, char** argv) {
namespace po = boost::program_options;
po::variables_map vm;
po::options_description desc("Allowed Options");
// declare arguments
desc.add_options()
("name", po::value<std::string>()->required(), "Type your name to be greeted!");
// parse arguments and save them in the variable map (vm)
po::store(po::parse_command_line(argc, argv, desc), vm);
std::cout << "Hello " << vm["name"].as<std::string>() << std::endl;
return 0;
}
इसके साथ संकलित करें और चलाएं:
$ g++ main.cpp -lboost_program_options && ./a.out --name Batman
Hello Batman
आप अपेक्षित तर्क प्रारूप को प्रिंट करने के लिए एक boost::program_options::options_description ऑब्जेक्ट का उत्पादन कर सकते हैं:
std::cout << desc << std::endl;
उत्पादन होगा:
Allowed Options:
--name arg Type your name to be greeted!
गलती संभालना
boost::program_options::notify का उपयोग पारित होने वाले किसी भी त्रुटि की रिपोर्ट करने के लिए किया जा सकता है
#include <boost/program_options.hpp>
#include <string>
#include <iostream>
int main(int argc, char** argv) {
namespace po = boost::program_options;
po::variables_map vm;
po::options_description desc("Allowed Options");
// declare options
desc.add_options()
("name", po::value<std::string>()->required(), "Type your name to be greeted!");
// parse arguments
po::store(po::parse_command_line(argc, argv, desc), vm);
// check arguments
try {
po::notify(vm);
} catch (std::exception& e) {
std::cout << "Error: " << e.what() << std::endl;
std::cout << desc << std::endl;
return 1;
}
// program logic
std::cout << "Hello " << vm["name"].as<std::string>() << std::endl;
return 0;
}
अवैध तर्कों को पारित करने से सहायक त्रुटियों वाले संदेश उत्पन्न होते हैं
$ ./a.out
Error: the option '--name' is required but missing
Allowed Options:
--name arg Type your name to be greeted!
डिफ़ॉल्ट मान
एक डिफ़ॉल्ट मूल्यवान कमांड लाइन तर्क को आसानी से निर्दिष्ट किया जा सकता है:
// declare options
desc.add_options()
("name", po::value<std::string>()->required(), "Type your name to be greeted!")
("rank", po::value<std::string>()->default_value("Dark Knight"), "Your rank");
इसका मान चर मानचित्र में भी जोड़ा जाता है:
std::cout << "Hello " << vm["name"].as<std::string>() << " " << vm["rank"].as<std::string>() << std::endl;
डिफ़ॉल्ट मान विवरण में दिखाया गया है ...
$ ./a.out
Error: the option '--name' is required but missing
Allowed Options:
--name arg Type your name to be greeted!
--rank arg (=Dark Knight) Your rank
... और यदि निर्दिष्ट नहीं किया जाता है ...
$ ./a.out --name Batman
Hello Batman Dark Knight
... लेकिन कमांड लाइन पर अधिलेखित किया जा सकता है:
$ ./a.out --name Batman --rank FlyingSquirrel
Hello Batman FlyingSquirrel
स्विच
स्विच एक कमांड लाइन तर्क है जिसका कोई मूल्य नहीं है। इसके साथ निर्दिष्ट किया जा सकता है:
desc.add_options()
("hidden", po::bool_switch()->default_value(false), "Hide your name");
और इसके साथ प्रयोग किया जाता है:
if (vm["hidden"].as<bool>())
std::cout << "Hello *****" << std::endl;
कमांड लाइन से:
$ ./a.out --name Batman --hidden
Hello *****
और विवरण में यह दिखाया गया है:
Allowed Options:
--name arg Type your name to be greeted!
--rank arg (=Dark Knight) Your rank
--hidden Hide your name