C++ में YAML के साथ काम करें: yaml-cpp और rapidyaml लाइब्रेरी
YAML (YAML Ain't Markup Language) एक डेटा सीरियलाइज़ेशन फ़ॉर्मेट है जो कॉन्फ़िगरेशन फ़ाइलों, एनवायरनमेंट डिस्क्रिप्शन फ़ाइलों (Docker Compose, Kubernetes) और सर्विसेज के बीच डेटा एक्सचेंज के लिए व्यापक रूप से उपयोग किया जाता है। JSON के विपरीत, YAML इंडेंटेशन और कमेंट्स के सपोर्ट के कारण मनुष्यों के लिए अधिक पढ़ने योग्य है।
C++ में YAML के लिए कोई बिल्ट-इन सपोर्ट नहीं है, लेकिन बेहतरीन थर्ड-पार्टी लाइब्रेरी मौजूद हैं। इस लेख में हम दो सबसे लोकप्रिय लाइब्रेरी देखेंगे: yaml-cpp (क्लासिक, सरल) और rapidyaml (आधुनिक, बहुत तेज़)। आप सीखेंगे कि लाइब्रेरी कैसे इंस्टॉल करें, YAML फ़ाइल कैसे पढ़ें, प्रोग्रामेटिक रूप से कैसे बनाएं और सामान्य एरर को कैसे हैंडल करें।
1. yaml-cpp लाइब्रेरी
yaml-cpp C++ में YAML के साथ काम करने के लिए डी-फैक्टो स्टैंडर्ड लाइब्रेरी है। यह एक सुविधाजनक API प्रदान करती है जो STL कंटेनरों के साथ काम करने जैसा लगता है। यह लाइब्रेरी YAML 1.2 स्पेसिफिकेशन को सपोर्ट करती है।
इंस्टॉलेशन
सबसे आसान तरीका vcpkg या Conan पैकेज मैनेजर का उपयोग करना है। Linux/macOS के लिए:
# vcpkg के माध्यम से इंस्टॉल करें
vcpkg install yaml-cpp
# Conan के माध्यम से इंस्टॉल करें
conan install yaml-cpp/0.7.0@
अगर आप मैन्युअली बिल्ड करना पसंद करते हैं, तो GitHub से सोर्स कोड डाउनलोड करें और यह कमांड चलाएं:
mkdir build && cd build
cmake ..
cmake --build .
sudo cmake --install .
YAML फ़ाइल पार्स करना
मान लीजिए हमारे पास एक कॉन्फ़िगरेशन फ़ाइल config.yaml है:
server:
host: "localhost"
port: 8080
debug: true
database:
driver: "postgresql"
connection_string: "host=localhost dbname=test"
pool_size: 10
C++ में डेटा पढ़ने और एक्सेस करने का उदाहरण:
#include <yaml-cpp/yaml.h>
#include <iostream>
#include <string>
int main() {
try {
// फ़ाइल लोड करें
YAML::Node config = YAML::LoadFile("config.yaml");
// नेस्टेड नोड्स तक पहुंचें
std::string host = config["server"]["host"].as<std::string>();
int port = config["server"]["port"].as<int>();
bool debug = config["server"]["debug"].as<bool>();
std::cout << "Server: " << host << ":" << port
<< " (debug=" << (debug ? "on" : "off") << ")\n";
// की के अस्तित्व की जांच करें
if (config["database"]["pool_size"]) {
int pool = config["database"]["pool_size"].as<int>();
std::cout << "Pool size: " << pool << "\n";
}
// सीक्वेंस (लिस्ट) पर इटरेट करें
// मान लीजिए YAML में फ़ील्ड है: hosts: ["alpha", "beta", "gamma"]
// for (const auto& h : config["hosts"]) {
// std::cout << "Host: " << h.as<std::string>() << "\n";
// }
} catch (const YAML::Exception& e) {
std::cerr << "YAML parsing error: " << e.what() << "\n";
return 1;
} catch (const std::exception& e) {
std::cerr << "General error: " << e.what() << "\n";
return 1;
}
return 0;
}
YAML डॉक्यूमेंट बनाना
yaml-cpp की मदद से आप न केवल पढ़ सकते हैं, बल्कि YAML जनरेट भी कर सकते हैं:
#include <yaml-cpp/yaml.h>
#include <fstream>
int main() {
YAML::Emitter out;
out << YAML::BeginMap;
out << YAML::Key << "application";
out << YAML::Value << "MyApp";
out << YAML::Key << "version";
out << YAML::Value << 2.5;
out << YAML::Key << "features";
out << YAML::Value << YAML::BeginSeq;
out << "logging" << "auth" << "cache";
out << YAML::EndSeq;
out << Y पुस्तकालय में भी
mikro-orm TypeScript: पूर्ण गाइड, उदाहरण और सेटअप