निम्न उदाहरणसमारोह अधिभार लैम्ब्डा का उपयोग कर समारोह हस्ताक्षर
void foo(const std::function<int()>& f) {
std::cout << f() << std::endl;
}
void foo(const std::function<int(int x)>& f) {
std::cout << f(5) << std::endl;
}
int main() {
foo([](){return 3;});
foo([](int x){return x;});
}
यह संकलन नहीं करता, क्योंकि foo
करने के लिए कॉल अस्पष्ट होना कहा जाता है पर विचार करें। जहां तक मैं समझता हूं कि यह तथ्य इस तथ्य के कारण है कि लैम्ब्डा फ़ंक्शन std::function
से पहले नहीं है, लेकिन उसे std::function
कन्स्ट्रक्टर है जो मनमाने ढंग से तर्क लेता है।
शायद कोई मुझे समझा सकता है कि कोई भी एक अंतर्निहित रचनाकार क्यों बनायेगा जो मनमाने ढंग से तर्क लेता है। हालांकि मेरा आकस्मिक सवाल यह है कि क्या कोई कामकाज है, जो कि foo
फ़ंक्शन को अधिभारित करने के लिए लैम्ब्डा फ़ंक्शंस के फ़ंक्शन हस्ताक्षर का उपयोग करने की अनुमति देता है। मैंने फ़ंक्शन पॉइंटर्स का प्रयास किया है, लेकिन यह काम नहीं किया क्योंकि लैम्ब्डा फ़ंक्शंस को कैप्चर करना सामान्य फ़ंक्शन पॉइंटर पर नहीं डाला जा सकता है।
किसी भी मदद का स्वागत है।
यह शायद एमएसवीसी में एक बग है। यह क्लैंग/जीसीसी में काम करता है। –
ओह माइक्रोसॉफ्ट, आप बहुत मजेदार –
[मेरे लिए काम करता है] (http://ideone.com/XmAgLG)। आप किस कंपाइलर का उपयोग कर रहे हैं? –