toml++ C++: पूरी गाइड, उदाहरण और इंस्टॉलेशन

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

toml++ C++: पूरी गाइड, उदाहरण और इंस्टॉलेशन

1. यह क्या है और क्यों ज़रूरी है?

TOML (Tom's Obvious Minimal Language) एक कॉन्फ़िगरेशन फ़ाइल फ़ॉर्मेट है, जिसे INI, YAML और JSON के विकल्प के रूप में बनाया गया है। इसे इंसानों के लिए अधिकतम पढ़ने योग्य बनाने, हैश-टेबल में सीधे मैप करने और पार्स करने में आसान बनाने के लिए डिज़ाइन किया गया है। YAML के विपरीत, TOML में कोई अस्पष्टता नहीं है (जैसे इंडेंटेशन या डेटा टाइप), और JSON के विपरीत, इसमें कीज़ के लिए कोट्स की ज़रूरत नहीं है और यह कमेंट्स को सपोर्ट करता है।

toml++ (जिसे tomlplusplus के नाम से भी जाना जाता है) C++17 और उससे ऊपर के लिए एक आधुनिक, header-only लाइब्रेरी है, जो TOML फ़ाइलों को पार्स और जनरेट करती है। इसे अलग से कंपाइल करने की ज़रूरत नहीं है: बस हेडर फ़ाइल को इन्क्लूड करें और पूरी कार्यक्षमता मिल जाएगी। यह इसे उन प्रोजेक्ट्स के लिए आदर्श बनाता है जहाँ आसान इंटीग्रेशन, परफ़ॉर्मेंस और सख्त टाइपिंग महत्वपूर्ण है।

toml++ का उपयोग क्यों करें? पहला, यह TOML v1.0 स्पेसिफिकेशन को पूरी तरह सपोर्ट करता है, जिसमें इनलाइन टेबल, टेबल ऐरे, डेट, टाइम और लोकल डेट शामिल हैं। दूसरा, यह टाइप सेफ्टी पर ध्यान देकर लिखा गया है: आपको कच्चा JSON जैसा ऑब्जेक्ट नहीं, बल्कि सख्ती से टाइप किए गए वैल्यू (std::string, int64_t, double, bool, toml::date आदि) मिलते हैं। तीसरा, यह बहुत तेज़ है और इसमें न्यूनतम डिपेंडेंसी है (सिर्फ C++17 स्टैंडर्ड लाइब्रेरी)।

2. इंस्टॉलेशन

toml++ एक header-only लाइब्रेरी है। इसका मतलब है कि आपको इसे अलग से कंपाइल करने की ज़रूरत नहीं है। बस हेडर फ़ाइलों को अपने प्रोजेक्ट में कॉपी करें और इन्क्लूड करें।

तरीका 1: Vcpkg (Windows और Linux के लिए अनुशंसित)

# vcpkg के माध्यम से इंस्टॉल करें
vcpkg install tomlplusplus

# CMakeLists.txt में कनेक्ट करें
find_package(tomlplusplus CONFIG REQUIRED)
target_link_libraries(my_project PRIVATE tomlplusplus::tomlplusplus)

तरीका 2: Conan

# Conan के माध्यम से इंस्टॉल करें
conan install tomlplusplus/3.4.0@

# conanfile.txt में
[requires]
tomlplusplus/3.4.0

[generators]
CMakeDeps

तरीका 3: मैन्युअल इंस्टॉलेशन (सबसे आसान)

# GitHub से नवीनतम रिलीज़ डाउनलोड करें
wget https://github.com/marzer/tomlplusplus/archive/refs/tags/v3.4.0.tar.gz
tar -xzf v3.4.0.tar.gz

# include/toml++ फ़ोल्डर को अपने प्रोजेक्ट में कॉपी करें
cp -r tomlplusplus-3.4.0/include/toml++ /path/to/your/project/include/

# अपने कोड में बस इन्क्लूड करें:
#include <toml++/toml.h>

तरीका 4: CMake FetchContent (CMake प्रोजेक्ट्स के लिए)

include(FetchContent)
FetchContent_Declare(
    tomlplusplus
    GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git
    GIT_TAG v3.4.0
)
FetchContent_MakeAvailable(tomlplusplus)

target_link_libraries(my_project PRIVATE tomlplusplus::tomlplusplus)

3. तुरंत शुरुआत — एक न्यूनतम काम करने वाला उदाहरण

एक फ़ाइल बनाएँ config.toml:

# config.toml
title = "कॉन्फ़िगरेशन का उदाहरण"

[server]
host = "localhost"
port = 8080
debug = true

[database]
name = "mydb"
user = "admin"
password = "secret123"

अब इसे पढ़ने के लिए C++ कोड लिखें:

#include <toml++/toml.h>
#include <iostream>
#include <filesystem>

int main() {
    // 1. फ़ाइल को पार्स करें
    auto config = toml::parse_file("config.toml");

    // 2. सरल वैल्यू पढ़ें
    std::string title = config["title"].value_or("default");
    std::cout << "शीर्षक: " << title << std::endl;

    // 3. नेस्टेड टेबल पढ़ें
    auto server = config["server"];
    std::string host = server["host"].value_or("localhost");
    int port = server["port"].value_or(3000);
    bool debug = server["debug"].value_or(false);

    std::cout << "सर्वर: " << host << ":" << port << std::endl;
    std::cout << "डीबग मोड: " << (debug ? "चालू" : "बंद") << std::endl;

    // 4. डेटाबेस सेटिंग्स पढ़ें
    auto database = config["database"];
    std::string db_name = database["name"].value_or("default_db");
    std::string db_user = database["user"].value_or("root");

    std::cout << "डेटाबेस: " << db_name << ", उपयोगकर्ता: " << db_user << std::endl;

    return 0;
}

यह कोड config.toml फ़ाइल को पार्स करेगा और सभी वैल्यू को कंसोल पर प्रिंट करेगा। value_or() फ़ंक्शन डिफ़ॉल्ट वैल्यू सेट करने के लिए उपयोगी है, अगर कोई की मौजूद नहीं है।

अनुशंसाएँ