"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > हम एक पैक्ड वैरिएडिक टेम्प्लेट तर्क सूची को संक्षेप में कैसे दोहरा सकते हैं?

हम एक पैक्ड वैरिएडिक टेम्प्लेट तर्क सूची को संक्षेप में कैसे दोहरा सकते हैं?

2024-11-04 को प्रकाशित
ब्राउज़ करें:293

How Can We Iterate Over a Packed Variadic Template Argument List Concisely?

एक पैक्ड वेरिएडिक टेम्प्लेट तर्क सूची पर पुनरावृति कैसे करें

सी में, एक पैक्ड वेरिएडिक टेम्प्लेट तर्क सूची पर पुनरावृत्त करना एक चुनौती बन जाता है तर्कों की संख्या जानने और उनसे व्यक्तिगत रूप से डेटा पुनर्प्राप्त करने में असमर्थता। फ़ंक्शन के निर्माण में मैक्रो के उपयोग से यह समस्या और भी जटिल हो गई है, जो पुनरावर्ती कॉल को रोकता है।

इसे संबोधित करने के लिए, प्रदान किया गया समाधान एक कस्टम प्रकार, कोई भी नियोजित करता है, जो विभिन्न प्रकार के डेटा को धारण कर सकता है। इस प्रकार को एक विविध टेम्पलेट में पास करके, तर्कों को किसी भी ऑब्जेक्ट के वेक्टर में विस्तारित किया जाता है। इसके बाद, इस वेक्टर के अलग-अलग तत्वों को विशेष गेटर फ़ंक्शंस (get()) का उपयोग करके पुनर्प्राप्त किया जा सकता है, जो विभिन्न प्रकार के डेटा पर पुनरावृत्ति की अनुमति देता है।

हालांकि यह विधि कार्य पूरा करती है, लेकिन इसकी आवश्यकता होती है वर्बोज़ फ़ंक्शन कॉल, जैसे foo(arg(1000)). इसे सरल बनाने के लिए, हम पैक किए गए विविध टेम्पलेट तर्क सूचियों के लिए अधिक संक्षिप्त पुनरावृत्ति विधि या std::get() के समकक्ष की तलाश करते हैं।

एसटीएल फोल्ड एक्सप्रेशन और लैम्ब्डा का उपयोग करके समाधान

सी 17 और बाद के संस्करण के लिए, पुनरावृत्ति प्राप्त करने के लिए फोल्ड एक्सप्रेशन का उपयोग लैम्ब्डा फ़ंक्शन के साथ किया जा सकता है। लैम्ब्डा लूप के भीतर मनमाना संचालन कर सकता है, जिसमें एक काउंटर बढ़ाना और वर्तमान तर्क को प्रिंट करना शामिल है:

template 
void Foo (Ts && ... inputs)
{
    int i = 0;

    ([&]
    {
        // Do things in your "loop" lambda

          i;
        std::cout << "input " << i << " = " << inputs << std::endl;

    } (), ...);
}

यह विधि अधिक संक्षिप्त और सुपाठ्य पुनरावृत्ति तंत्र प्रदान करती है।

लूप ब्रेक से निपटने के लिए विकल्प

हालांकि उपरोक्त समाधान कार्य पूरा करता है, इसमें लूप के भीतर ब्रेक या रिटर्न लागू करने की क्षमता का अभाव है। इसे संबोधित करने के लिए, हम वर्कअराउंड का उपयोग कर सकते हैं जैसे:

  • ट्राई/थ्रो का उपयोग करना: इस दृष्टिकोण में, हम लूप से बाहर निकलने के लिए लैम्ब्डा के भीतर अपवाद फेंक सकते हैं। हालाँकि, अपवादों की अधिकता के कारण यह विधि प्रदर्शन को महत्वपूर्ण रूप से प्रभावित कर सकती है। सूचित करते रहना। प्रभावी होते हुए भी, यह ऐसे कोड को जन्म दे सकता है जो सौंदर्य की दृष्टि से कम सुखद है।
विज्ञप्ति वक्तव्य यह आलेख यहां पुनर्मुद्रित है: 1729667291 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.कॉम से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3