C++ में अनुप्रयोग कॉन्फ़िगरेशन: उपकरणों और लाइब्रेरीज़ का अवलोकन
आधुनिक C++ अनुप्रयोग शायद ही कभी बाहरी सेटिंग्स के बिना चलते हैं। कॉन्फ़िगरेशन फ़ाइलें प्रोग्राम के व्यवहार को पुनर्संकलन के बिना बदलने की अनुमति देती हैं: संसाधनों के पथ और डेटाबेस कनेक्शन पैरामीटर से लेकर एल्गोरिदम चयन और सुविधाओं को सक्षम/अक्षम करने तक। इस लेख में, हम C++ में कॉन्फ़िगरेशन के लिए चार लोकप्रिय उपकरणों की समीक्षा करेंगे: Boost.Program_options, libconfig, nlohmann/json और yaml-cpp।
1. Boost.Program_options — बहुमुखी कमांड लाइन और कॉन्फ़िग पार्सर
Boost.Program_options — Boost लाइब्रेरी का हिस्सा है। यह कमांड लाइन तर्कों, पर्यावरण चरों और कॉन्फ़िगरेशन फ़ाइलों को एक समान रूप से संसाधित करने की अनुमति देता है। यह कई प्रारूपों (INI, सरल टेक्स्ट) का समर्थन करता है, लेकिन JSON/YAML का नहीं।
मुख्य क्षमताएँ:
- स्वचालित सहायता पीढ़ी (
--help); - प्रकार सत्यापन (int, double, string, vector);
- पदानुक्रमित विकल्प (समूह);
- प्राथमिकता के साथ कई स्रोतों से पढ़ना।
उपयोग का उदाहरण (INI फ़ाइल से पढ़ना):
#include <boost/program_options.hpp>#include <iostream>#include <fstream>
namespace po = boost::program_options;
int main(int argc, char* argv[]) { po::options_description config("कॉन्फ़िगरेशन"); config.add_options() ("database.host", po::value<std::string>()->default_value("localhost"), "डेटाबेस होस्ट") ("database.port", po::value<int>()->default_value(3306), "डेटाबेस पोर्ट") ("logging.level", po::value<std::string>()->default_value("info"), "लॉग स्तर");
po::variables_map vm; std::ifstream ifs("app.ini"); if (ifs) { po::store(po::parse_config_file(ifs, config), vm); po::notify(vm); }
std::cout << "होस्ट: " << vm["database.host"].as<std::string>() << ""; std::cout << "पोर्ट: " << vm["database.port"].as<int>() << ""; return 0;}2. libconfig — अपने स्वयं के प्रारूप के साथ हल्की लाइब्रेरी
libconfig — C (C++ रैपर के साथ) में एक लाइब्रेरी है जिसका अपना कॉम्पैक्ट कॉन्फ़िग प्रारूप है। यह पदानुक्रम, सरणियाँ, समूह और टिप्पणियों का समर्थन करता है। यह उच्च पार्सिंग गति के लिए जाना जाता है।
फ़ाइल प्रारूप (उदाहरण app.cfg):
database = { host = "localhost"; port = 3306; users = [ "admin", "guest" ];};logging = { level = "info"; file = "/var/log/app.log";};C++ में पढ़ने का उदाहरण:
#include <libconfig.h++>#include <iostream>
int main() { libconfig::Config cfg; try { cfg.readFile("app.cfg"); std::string host = cfg.lookup("database.host"); int port = cfg.lookup("database.port"); std::cout << "कनेक्ट हो रहा है " << host << ":" << port << ""; } catch (const libconfig::FileIOException &e) { std::cerr << "फ़ाइल पढ़ने में त्रुटि"; } catch (const libconfig::ParseException &e) { std::cerr << "पार्सिंग त्रुटि: " << e.what() << ""; } return 0;}3. nlohmann/json — आधुनिक JSON पार्सर
nlohmann/json लाइब्रेरी (JSON for Modern C++) सबसे लोकप्रिय में से एक है। यह JSON प्रारूप के साथ काम करती है, जो वेब अनुप्रयोगों और माइक्रोसर्विसेज में व्यापक रूप से उपयोग किया जाता है। यह सहज ज्ञान युक्त सिंटैक्स ([] ऑपरेटर, इटरेटर) द्वारा प्रतिष्ठित है।
JSON कॉन्फ़िग पढ़ने का उदाहरण:
#include <nlohmann/json.hpp>#include <fstream>#include <iostream>
using json = nlohmann::json;
int main() { std::ifstream f("config.json"); json data = json::parse(f);
std::strin