C++ के लिए fmt लाइब्रेरी का परिचय
fmt (या fmtlib) लाइब्रेरी C++ में स्ट्रिंग फ़ॉर्मेटिंग के लिए एक आधुनिक, तेज़ और सुरक्षित लाइब्रेरी है। यह पुराने printf और sprintf जैसे फंक्शनों के साथ-साथ जटिल std::stringstream स्ट्रीम का एक बेहतरीन विकल्प प्रदान करती है। fmt का मुख्य उद्देश्य स्ट्रिंग फ़ॉर्मेटिंग को सरल, टाइप-सेफ, एक्सटेंसिबल और परफॉरमेंट बनाना है।
fmt की आवश्यकता क्यों है? सबसे पहले, यह टाइप सुरक्षा की समस्या को हल करती है। printf आर्गुमेंट के टाइप की जाँच नहीं करता, जिससे अनिर्धारित व्यवहार और मुश्किल से पकड़ में आने वाले बग होते हैं। दूसरी ओर, fmt C++ टेम्पलेट का उपयोग करता है और कंपाइल टाइम पर टाइप की जाँच करता है। दूसरा, fmt std::stringstream की तुलना में काफी तेज़ है, और अक्सर printf से भी तेज़ होता है। तीसरा, इसका सिंटैक्स सहज है और Python में फ़ॉर्मेटिंग जैसा दिखता है, जिससे भाषाओं के बीच स्विच करना आसान हो जाता है। यह इतना लोकप्रिय हुआ कि fmt ही std::format का आधार बना, जिसे C++20 मानक में शामिल किया गया।
इस साइट pythonlib.ru पर हम अक्सर Python के बारे में बात करते हैं, लेकिन fmt एक शानदार उदाहरण है कि कैसे Python की अच्छी आइडियाज़ C++ की दुनिया में आईं और वहाँ डी-फैक्टो स्टैंडर्ड बन गईं। अगर आप C++ में कोड लिखते हैं और इसे आधुनिक तरीके से करना चाहते हैं, तो fmt आपके शस्त्रागार में एक अनिवार्य लाइब्रेरी है।
fmt लाइब्रेरी की स्थापना (Installation)
पैकेज मैनेजर के माध्यम से स्थापना (Conan, vcpkg)
आधुनिक C++ प्रोजेक्ट में fmt स्थापित करने का सबसे आसान तरीका पैकेज मैनेजर का उपयोग करना है।
Conan:
conan install fmt/10.1.1@
# या अपने conanfile.txt में:
# [requires]
# fmt/10.1.1
vcpkg:
vcpkg install fmt
# फिर CMakeLists.txt में:
# find_package(fmt CONFIG REQUIRED)
# target_link_libraries(your_project PRIVATE fmt::fmt)
मैन्युअल स्थापना (सोर्स कोड से बिल्ड)
आप GitHub से सोर्स कोड डाउनलोड कर सकते हैं और CMake का उपयोग करके इसे बिल्ड कर सकते हैं:
git clone https://github.com/fmtlib/fmt.git
cd fmt
mkdir build && cd build
cmake ..
make -j4
sudo make install
pip के माध्यम से स्थापना (Python एक्सटेंशन के लिए)
हालाँकि fmt एक C++ लाइब्रेरी है, इसे Python पैकेज के रूप में भी स्थापित किया जा सकता है यदि आप pybind11 या cppyy का उपयोग करके C++ एक्सटेंशन लिख रहे हैं:
pip install fmt
हालाँकि, शुद्ध C++ के संदर्भ में इसका कोई मतलब नहीं है। आमतौर पर आप बस हेडर फ़ाइलों को शामिल करते हैं।
प्रोजेक्ट में शामिल करना (Header-Only मोड)
fmt का उपयोग header-only मोड में किया जा सकता है, बस include/fmt फ़ोल्डर को अपने प्रोजेक्ट में कॉपी करें और निम्नलिखित जोड़ें:
#define FMT_HEADER_ONLY
#include "fmt/core.h"
#include "fmt/format.h"
कोड उदाहरण के साथ त्वरित शुरुआत
आइए एक बहुत ही सरल उदाहरण से शुरू करते हैं जो बुनियादी फ़ॉर्मेटिंग दिखाता है:
#include <fmt/core.h>
#include <fmt/format.h>
#include <iostream>
int main() {
// सबसे सरल फ़ॉर्मेटिंग
std::string message = fmt::format("नमस्ते, {}! आपकी उम्र {} वर्ष है।", "दुनिया", 25);
std::cout << message << std::endl;
// stdout पर आउटपुट
fmt::print("पाई का मान लगभग {:.2f} है\n", 3.14159);
// नामित आर्गुमेंट के साथ फ़ॉर्मेटिंग (C++20 शैली)
fmt::print("उपयोगकर्ता: {name}, आयु: {age}\n",
fmt::arg("name", "राहुल"),
fmt::arg("age", 28));
return 0;
}
यह कोड आउटपुट देगा:
नमस्ते, दुनिया! आपकी उम्र 25 वर्ष है।
पाई का मान लगभग 3.14 है
उपयोगकर्ता: राहुल, आयु: 28
जैसा कि आप देख सकते हैं, {} सिंटैक्स Python के समान है। सब कुछ सहज और पढ़ने में आसान है।
fmt लाइब्रेरी के मुख्य तरीके और फंक्शन
नीचे fmt के प्रमुख फंक्शनों का विस्तृत विवरण दिया गया है। हम उनके सिग्नेचर, पैरामीटर और उपयोग के उदाहरण देखेंगे।
1. fmt::format
विवरण: यह फंक्शन एक फ़ॉर्मेट स्ट्रिंग और आर्गुमेंट लेता है और एक नई std::string लौटाता है। यह सबसे अधिक उपयोग किया जाने वाला फंक्शन है।