फ़ंक्शन पॉइंटर विशिष्ट को संदर्भित करने का एक तरीका प्रदान करते हैं ऑपरेटर कार्य. हालाँकि, अंतर्निहित मानक ऑपरेटरों के लिए, यह दृष्टिकोण सीधा नहीं हो सकता है। यह आलेख इस सीमा के पीछे के कारणों पर प्रकाश डालता है और समान कार्यक्षमता प्राप्त करने के लिए वैकल्पिक समाधानों की खोज करता है।
सी मानक के अनुसार (13.6/ 1), अंतर्निर्मित ऑपरेटर नियमित ऑपरेटर फ़ंक्शन नहीं हैं और इस प्रकार उनकी ओर इंगित करने वाले फ़ंक्शन पॉइंटर्स नहीं हो सकते हैं। वे किसी भी अन्य उद्देश्य को पूरा किए बिना केवल ओवरलोड रिज़ॉल्यूशन में भाग लेते हैं। टेम्प्लेट ऑब्जेक्ट के माध्यम से ऑपरेटर। उदाहरण के लिए, तुलना के लिए, समान_से, अधिक, और कम_equal जैसी फ़ंक्शन ऑब्जेक्ट परिभाषित की जाती हैं। इन ऑब्जेक्ट्स का उपयोग फ़ंक्शन पॉइंटर तर्क के रूप में किया जा सकता है।
प्रदान किए गए कोड स्निपेट में, लक्ष्य एक टेम्पलेट क्लास के भीतर दो पूर्णांकों की तुलना करना है। फ़ंक्शन ऑब्जेक्ट तकनीक का उपयोग करके, इसे निम्नानुसार प्राप्त किया जा सकता है:
class MyAction { बूल ऑपरेटर()() { यदि (fnCompare_(arg0_, arg1_)) { // इसे करें } अन्य { // एस.टी.एच. करो अन्य } } };यहां, तुलना करने के लिए fnCompare_ std::equal_toclass MyAction {
bool operator()() {
if (fnCompare_(arg0_, arg1_)) {
// do this
} else {
// do s.th. else
}
}
};
फ़ंक्शन ऑब्जेक्ट के अलावा , मानक लाइब्रेरी ऑपरेटरों का उपयोग फ़ंक्शन पॉइंटर्स के रूप में भी किया जा सकता है। हालाँकि, टेम्पलेट के संबंधित उदाहरण को संदर्भित किया जाना चाहिए। उदाहरण के लिए:
std::basic_stringstd::basic_string a("test"), b("test2");
std::cout >(a, b, &std::operator );
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3