मैं यहां करंट के खिलाफ जाने वाला हूं।
सी में, फ़ंक्शन पॉइंटर्स अनुकूलन को लागू करने का एकमात्र तरीका है, क्योंकि कोई ओओ नहीं है।
C ++ में, आप समान परिणाम के लिए फ़ंक्शन पॉइंटर्स या फ़ंक्शनलर्स (फ़ंक्शन ऑब्जेक्ट) का उपयोग कर सकते हैं।
फंक्शनलर्स के पास रॉ फंक्शन पॉइंट्स पर कई फायदे हैं, जो उनकी वस्तु प्रकृति के कारण हैं:
- वे के कई अधिभार प्रस्तुत कर सकते हैं
operator()
- उनके पास मौजूदा चर के लिए राज्य / संदर्भ हो सकते हैं
- उन्हें मौके पर बनाया जा सकता है (
lambda
और bind
)
मैं व्यक्तिगत रूप से फंक्शन पॉइंटर्स (बॉयलरप्लेट कोड के बावजूद) के लिए फंक्शनलर्स पसंद करता हूं, ज्यादातर इसलिए क्योंकि फंक्शन पॉइंटर्स के लिए सिंटैक्स आसानी से बालों ( फंक्शन पॉइंटर ट्यूटोरियल से ) प्राप्त कर सकते हैं :
typedef float(*pt2Func)(float, float);
// defines a symbol pt2Func, pointer to a (float, float) -> float function
typedef int (TMyClass::*pt2Member)(float, char, char);
// defines a symbol pt2Member, pointer to a (float, char, char) -> int function
// belonging to the class TMyClass
केवल समय मैंने कभी फ़ंक्शन पॉइंटर्स का उपयोग किया है, जहां फ़ंक्शंस Boost.Spirit में नहीं हो सकता था। उन्होंने एकल टेम्पलेट पैरामीटर के रूप में मापदंडों की एक मनमानी संख्या पारित करने के लिए वाक्यविन्यास का पूरी तरह से दुरुपयोग किया है।
typedef SpecialClass<float(float,float)> class_type;
लेकिन चूंकि वैरेडिक टेम्प्लेट और लैम्ब्डा कोने के आसपास हैं, मुझे यकीन नहीं है कि हम लंबे समय तक शुद्ध सी ++ कोड में फ़ंक्शन पॉइंटर्स का उपयोग करेंगे।