C++ इकोसिस्टम: सिर्फ एक भाषा नहीं, बल्कि एक पूरा ब्रह्मांड
\n\nयदि आपने कभी C++ में कुछ हफ्तों से अधिक समय तक कोड लिखा है, तो आप जानते हैं: मानक लाइब्रेरी आधार है, लेकिन यह सब कुछ नहीं है। असली शक्ति तब सामने आती है जब आप तृतीय-पक्ष लाइब्रेरीज़ को जोड़ते हैं। कल्पना करें कि आप एक घर बना रहे हैं। मानक लाइब्रेरी नींव और दीवारें हैं। और Boost, Qt या OpenCV जैसी लाइब्रेरीज़ पहले से तैयार प्लंबिंग, इलेक्ट्रिकल वायरिंग और स्मार्ट होम हैं। इनके बिना काम चल सकता है, लेकिन लंबा और कठिन होता है।
\n\nइस लेख में, हम लोकप्रिय C++ लाइब्रेरीज़ पर चर्चा करेंगे जो वास्तव में प्रोडक्शन में उपयोग की जाती हैं। बिना अनावश्यक बातों के, कोड उदाहरणों और ईमानदार टिप्पणियों के साथ। चलिए शुरू करते हैं।
\n\nBoost: C++ डेवलपर का स्विस आर्मी नाइफ
\n\nचलिए एक किंवदंती से शुरू करते हैं। Boost C++ के लिए शायद सबसे प्रसिद्ध लाइब्रेरी संग्रह है। इसके कई घटक बाद में मानक में शामिल हो गए: स्मार्ट पॉइंटर्स, रेगुलर एक्सप्रेशन, फ़ाइल सिस्टम। यदि आप कोई गंभीर प्रोजेक्ट लिख रहे हैं, तो संभवतः Boost आपकी डिपेंडेंसी में पहले से मौजूद है।
\n\nअंदर क्या है?
\n- \n
Boost.Asio— नेटवर्क प्रोग्रामिंग और एसिंक्रोनस इनपुट-आउटपुट \n Boost.Beast— Asio पर आधारित HTTP और WebSocket \n Boost.Graph— ग्राफ़ और उन पर एल्गोरिदम के साथ काम करना \n Boost.Math— विशेष गणितीय फ़ंक्शन \n Boost.Serialization— डेटा सीरियलाइज़ेशन \n
Boost.Beast के साथ एक सरल HTTP क्लाइंट का उदाहरण:
\n\n#include <boost/beast/core.hpp>\n#include <boost/beast/http.hpp>\n#include <boost/asio/connect.hpp>\n#include <boost/asio/ip/tcp.hpp>\n#include <iostream>\n\nnamespace beast = boost::beast;\nnamespace http = beast::http;\nnamespace net = boost::asio;\nusing tcp = net::ip::tcp;\n\nint main() {\n net::io_context ioc;\n tcp::resolver resolver(ioc);\n tcp::socket socket(ioc);\n\n auto const results = resolver.resolve("example.com", "80");\n net::connect(socket, results.begin(), results.end());\n\n http::request<http::string_body> req{http::verb::get, "/", 11};\n req.set(http::field::host, "example.com");\n http::write(socket, req);\n\n beast::flat_buffer buffer;\n http::response<http::dynamic_body> res;\n http::read(socket, buffer, res);\n\n std::cout << res << std::endl;\n return 0;\n}\n\n\nBoost उन सभी के लिए must-have है जो पेशेवर स्तर पर लोकप्रिय C++ लाइब्रेरीज़ के साथ काम करते हैं।
\n\nQt: जब सिर्फ GUI से काम नहीं चलता
\n\nबहुत से लोग सोचते हैं कि Qt सिर्फ बटन और विंडो के बारे में है। वास्तव में यह एक विशाल फ्रेमवर्क है: नेटवर्क, डेटाबेस, मल्टीथ्रेडिंग, 2D/3D ग्राफिक्स, XML और JSON के साथ काम करना, और यहां तक कि मशीन लर्निंग (Qt for MCU के माध्यम से)। Qt एक इकोसिस्टम के अंदर एक इकोसिस्टम है।
\n\nQt अभी भी लोकप्रिय क्यों है?
\n- \n
- बॉक्स से बाहर क्रॉस-प्लेटफ़ॉर्म (Windows, Linux, macOS, Android, iOS) \n
- शक्तिशाली सिग्नल-स्लॉट तंत्र \n
- इंटरफ़ेस के लिए तैयार विजेट और QML \n
- उत्कृष्ट दस्तावेज़ीकरण \n
मिनी-उदाहरण: Qt के साथ JSON फ़ाइल पढ़ना:
\n\n#include <QCoreApplication>\n#include <QFile>\n#include <QJsonDocument>\n#include <QJsonObject>\n#include <QDebug>\n\nint main(int argc, char *argv[]) {\n QCoreApplication a(argc, argv);\n\n QFile file("data.json");\n if (!file.open(QIODevice::ReadOnly)) {\n qWarning() << "Cannot open file";\n return 1;\n }\n\n QByteArray rawData = file.readAll();\n QJsonDocument doc = QJsonDocument::fromJson(rawData);\n QJsonObject obj = doc.object();\n\n qDebug() << "Name:" << obj["name"].toString();\n qDebug() << "Version:" << obj["version"].toDouble();\n\n return 0;\n}\n\n\nयदि आपको सिर्फ कोड नहीं, बल्कि इंटरफ़ेस के साथ एक पूर्ण एप्लिकेशन चाहिए, तो Qt आपकी पसंद है। यह सबसे लो