क्षमा करें अगर इससे पहले पूछा गया है, लेकिन मैं इसे खोजने में असमर्थ था।फ़ंक्शन पॉइंटर के बजाय मान (?) द्वारा फ़ंक्शन पास करें?
तो मैं खुद को टेम्पलेट्स और नई सी ++ 11 विशेषताओं (मुख्य रूप से लैम्बडास, जो मुझे हमेशा अन्य भाषाओं में पसंद आया) के बारे में शिक्षित करने की कोशिश कर रहा हूं।
लेकिन मेरे परीक्षण में मैं कुछ मुझे नहीं पता कि यह काम किया था के लिए आया था, और मैं समझने के लिए कि यह कैसे लेकिन नहीं कर सकते यह आंकड़ा बाहर ..
निम्नलिखित कोड काम करता है कोशिश कर रहा हूँ:
template <class Func>
void Test(Func callback) {
callback(3);
}
void Callback(int i) {
std::cout << i << std::endl;
}
int main(int argc, char** argv) {
Test(&Callback); // this I was expecting to work, compiler will see its a pointer to a function
Test(Callback); // this also works, but how?!
return 0;
}
यदि मैं समझता हूं कि टेम्पलेट कैसे काम करते हैं, मूल रूप से वे कंपाइलर के लिए एक योजना है जो जानने के लिए है, तो पहला कॉल Test(&Callback);
मैं काम करने की उम्मीद कर रहा था क्योंकि संकलक को टेम्पलेट को एक फ़ंक्शन पता प्राप्त होगा और तर्कों को मानना चाहिए एक सूचक बनो।
लेकिन दूसरी कॉल क्या है? यह मानते हुए टेम्पलेट क्या है? एक Functio की एक प्रति (अगर यह भी कोई समझ में आता है)?
उत्तर के लिए धन्यवाद। इसलिए यदि मैंने टेम्पलेट्स का उपयोग नहीं किया और परीक्षण घोषित किया: शून्य परीक्षण (शून्य (* कॉलबैक) (int)) {...} दोनों कॉल भी काम करेंगे। यह जानकर अच्छा लगा। बीमार सुनिश्चित करें कि मैंने आपके द्वारा जुड़े धागे को पढ़ा है। – sap