मेरे पास एक वर्ग है
class fobj {public: fobj (int i): id (I) {} शून्य ऑपरेटर () () {std :: cout & lt; & lt; "प्रिंट" & lt; & lt; std :: endl; } निजी: int id; }; टेम्पलेट & lt; typename T & gt; शून्य func (टी प्रकार) {प्रकार (); }
अगर मैं func
को
विधि 1:
func (fobj (1) );
जो संदेश मैं मुद्रित करना चाहता था वह मुद्रित होता है।
विधि 2:
फ़ोब इबोज (1); // एफओबीजे क्लास फंक (आईओबीजे) का एक उदाहरण बनाएं; // Iobj (जो एक फ़ंक्शन ऑब्जेक्ट है) को पार करके कॉल करें।
विधि 1 कैसे काम करता है? मेरा मतलब है कि वास्तव में क्या होता है?
और क्लास एफओबीजे में ऑपरेटर () को कैसे कॉल किया जाता है?
<पी > नोट करने के लिए एक बात यह है कि यह काम करता है क्योंकि आपका टेम्पलेट क्लास मूल्य द्वारा एक वस्तु ले रहा है:
टेम्पलेट & lt; typename T & gt; शून्य func (T प्रकार) // यह मान से एक टी लेता है ...
इस वजह से, यह या तो एक lvalue (जैसे एक वास्तविक चर) या एक rvalue ले सकते हैं (जैसे अस्थायी रूप में)।
यदि किसी कारण से आप केवल एक लावलू लेते हुए func
को सीमित करना चाहते हैं, तो आप संदर्भ से पास का उपयोग करने के लिए फ़ंक्शन को संशोधित कर सकते हैं:
टेम्पलेट & lt; typename T & gt; शून्य func (T & amp; टाइप) // यह संदर्भ से एक टी लेता है ...
संदर्भ से पास का उपयोग करते हुए फ़ंक्शन के साइड इफेक्ट को ऑब्जेक्ट को संशोधित करने में सक्षम बनाता है। < / P>
Comments
Post a Comment