2011-08-22 12 views
8

मैं फ़ंक्शन पॉइंटर्स के बारे में पढ़ रहा हूं और अन्य कार्यों के लिए पैरामीटर के रूप में उनका उपयोग करने के बारे में पढ़ रहा हूं। मेरा सवाल यह है कि आप पॉइंटर्स का उपयोग किए बिना संदर्भ द्वारा फ़ंक्शन कैसे पारित करेंगे? मैं इंटरनेट पर जवाब खोजने की कोशिश कर रहा हूं लेकिन मुझे कोई अच्छा जवाब नहीं मिला है। मुझे पता है कि आप इस तरह के संदर्भ से चर पारित कर सकते हैं: void funct(int& anInt);। आप इस तरह के कुछ कैसे करेंगे, लेकिन एक चर के संदर्भ के बजाय किसी फ़ंक्शन का संदर्भ पैरामीटर था? फ़ंक्शन बॉडी में फ़ंक्शन के संदर्भ का उपयोग कैसे करेंगे?सी ++: किसी अन्य फ़ंक्शन में संदर्भ-टू-फ़ंक्शन कैसे पास करें?

+0

नोट:। आप कार्यों पारित नहीं कर सकते हैं। आप केवल कार्यों या संदर्भों को पॉइंटर्स पास कर सकते हैं। –

उत्तर

22
#include <iostream> 
using namespace std; 

void doCall(void (&f)(int)) 
{ 
    f(42); 
} 

void foo(int x) 
{ 
    cout << "The answer might be " << x << "." << endl; 
} 

int main() 
{ 
    doCall(foo); 
} 

चीयर्स & hth,

+1

जिज्ञासा से बाहर, मैं एक फ़ंक्शन के सूचक के बजाय फ़ंक्शन के संदर्भ का उपयोग क्यों करना चाहूंगा? – fredoverflow

+10

@FredOverflow: क्योंकि एक सूचक शून्य या अमान्य हो सकता है। एक संदर्भ गारंटी देता है कि यह मान्य है और शून्य नहीं है (कोई शून्य संदर्भ नहीं है), या फिर प्रोग्राम में कोई त्रुटि है। –

+4

@ एएलएफ पी। स्टीनबाक: "या फिर प्रोग्राम में कोई त्रुटि है" यह सिद्धांत में बहुत अच्छा लगता है लेकिन यदि आपके पास 'sometype & ref = * ptr' जैसा कुछ है; तो सूचक में पता बस पते में कॉपी किया जाएगा संदर्भ में, जो गैर-वैध या शून्य हो सकता है। आप कह सकते हैं कि उपरोक्त कथन अनिश्चित व्यवहार है जब 'ptr' गैर-वैध या शून्य है, लेकिन संकलन या रन-टाइम पर इसका कोई संकेत नहीं होगा, इसलिए यह सुनिश्चित करने के लिए प्रोग्रामर पर अभी भी है यह वैध और गैर-शून्य है, जैसा कि आपने एक सूचक का उपयोग किया था। तो मैं कहता हूं कि प्रोग्रामर में कोई फर्क नहीं पड़ता है। – newacct

संबंधित मुद्दे