C++ Academy · पाठ

std::visit

variant के विकल्पों को संसाधित करें

पाठ 4, कुल 4 में से13 चरण

std::visit, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

std::visit क्यों

get_if से हर विकल्प की मैन्युअल जाँच करना बहुत लंबा हो जाता है। std::visit वैरिएंट में इस समय रखे प्रकार पर कॉल करने योग्य वस्तु लागू करता है और आपके लिए सही प्रेषण संभालता है।

#include <iostream>
#include <variant>
int main() {
    std::variant<int, double> v = 4;
    std::visit([](auto x){ std::cout << x << "\n"; }, v);
}

एक सामान्य लैम्ब्डा विज़िटर

auto लेने वाला लैम्ब्डा हर विकल्प के लिए काम करता है, यदि उसका मुख्य भाग सभी विकल्पों के लिए संकलित हो सके। यहाँ हम सक्रिय प्रकार चाहे जो हो, उसे प्रिंट करते हैं।

#include <iostream>
#include <string>
#include <variant>
int main() {
    std::variant<int, std::string> v = std::string("hi");
    std::visit([](const auto& x){ std::cout << x << "\n"; }, v);
}

एक मान लौटाना

std::visit कोई मान लौटा सकता है। हर शाखा को एक ही प्रकार लौटाना होगा।

#include <iostream>
#include <variant>
int main() {
    std::variant<int, double> v = 2.5;
    double d = std::visit([](auto x){ return x * 2.0; }, v);
    std::cout << d << "\n";
}

if constexpr से प्रति-प्रकार व्यवहार

एक ही सामान्य लैम्ब्डा के अंदर हर प्रकार के लिए अलग तरीके से काम करने के लिए if constexpr को std::decay_t और std::is_same_v के साथ मिलाएँ।

#include <iostream>
#include <string>
#include <variant>
#include <type_traits>
int main() {
    std::variant<int, std::string> v = 5;
    std::visit([](const auto& x){
        using T = std::decay_t<decltype(x)>;
        if constexpr (std::is_same_v<T, int>) std::cout << "int " << x << "\n";
        else std::cout << "str " << x << "\n";
    }, v);
}

एक स्ट्रक्ट विज़िटर

आप कई operator() अधिभारित विधियों वाला स्ट्रक्ट भी लिख सकते हैं, हर प्रकार के लिए एक। कंपाइलर मेल खाने वाली विधि चुन लेता है।

#include <iostream>
#include <string>
#include <variant>
struct Printer {
    void operator()(int i) const { std::cout << "int " << i << "\n"; }
    void operator()(const std::string& s) const { std::cout << "str " << s << "\n"; }
};
int main() {
    std::variant<int, std::string> v = std::string("yo");
    std::visit(Printer{}, v);
}

overloaded शैली

एक लोकप्रिय सहायक कई लैम्ब्डा को मिलाकर एक विज़िटर बनाता है। हर लैम्ब्डा किसी विशेष प्रकार को संभालता है।

#include <iostream>
#include <string>
#include <variant>
template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
int main() {
    std::variant<int, std::string> v = 8;
    std::visit(overloaded{
        [](int i){ std::cout << "i=" << i << "\n"; },
        [](const std::string& s){ std::cout << "s=" << s << "\n"; }
    }, v);
}

सभी विकल्पों को संभालना

विज़िटर को हर विकल्प संभालना होगा, वरना कोड संकलित नहीं होगा। संकलन-समय की यह जाँच किसी मामले को भूलने से रोकती है।

विज़िट करना और बदलना

यदि आप वैरिएंट को गैर-const संदर्भ से भेजते हैं, तो विज़िटर रखे गए मान को उसी जगह बदल सकता है।

#include <iostream>
#include <variant>
int main() {
    std::variant<int, double> v = 10;
    std::visit([](auto& x){ x += 1; }, v);
    std::cout << std::get<int>(v) << "\n";
}

कई वैरिएंट

std::visit एक साथ कई वैरिएंट ले सकता है; तब विज़िटर को हर वैरिएंट के लिए एक-एक तर्क मिलता है।

#include <iostream>
#include <variant>
int main() {
    std::variant<int, double> a = 2;
    std::variant<int, double> b = 3.0;
    auto sum = std::visit([](auto x, auto y){ return x + y; }, a, b);
    std::cout << sum << "\n";
}

विज़िटर की शैली चुनना

एकसमान संचालन के लिए सामान्य auto लैम्ब्डा, साफ़ प्रति-प्रकार तर्क के लिए overloaded शैली, और अलग-अलग आह्वान-स्थलों पर दोबारा उपयोग होने वाले व्यवहार के लिए स्ट्रक्ट विज़िटर का उपयोग करें।

Visit बनाम get_if

एक अकेली त्वरित जाँच के लिए get_if ठीक है, लेकिन std::visit बड़े काम के लिए बेहतर है: यह सभी विकल्पों को संभालना अनिवार्य करता है और प्रति-प्रकार का पूरा तर्क एक ही जगह रखता है।

त्वरित जाँच

std::visit के बारे में अपनी समझ जाँचिए।

पुनरावलोकन

आपने std::visit के बारे में सीखा:

  • यह सक्रिय विकल्प पर कॉल करने योग्य वस्तु का प्रेषण करता है।
  • सामान्य लैम्ब्डा, if constexpr, स्ट्रक्ट विज़िटर या overloaded शैली का उपयोग करें।
  • विज़िटर को सभी विकल्प संभालने होंगे (संकलन-समय की जाँच)।
  • यह मान लौटा सकता है और एक साथ कई वैरिएंट पर काम कर सकता है।
शुरुआत निःशुल्क

एआई शिक्षक के साथ C++ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “std::visit” पाठ निःशुल्क है?

हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “std::visit” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“std::visit” में मैं क्या सीखूँगा?

variant के विकल्पों को संसाधित करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“std::visit” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. स्कोप वाला enum class
  2. यूनियन और उनके जोखिम
  3. std::variant
  4. std::visit
← C++ Academy पर वापस जाएँ