मान लीजिए मैं एक समारोह है कि दो तर्क लेता है,बाइंड से लौटाई गई वस्तुएं अतिरिक्त तर्कों को अनदेखा क्यों करती हैं?
void f(int x, int y);
और मैं उनमें से एक के लिए बाध्य करना चाहते हैं। इस प्रकार मैं std::bind
उपयोग कर सकते हैं:
auto partiallyBoundF = std::bind(f, 10, _1);
partiallyBoundF
केवल एक तर्क लेता है, लेकिन मैं एक से अधिक के साथ यह कह सकते हैं।
partiallyBoundF(20, 0);
partiallyBoundF(0, 44, -99, "Hello", 4.5, true, []{});
क्या की अनुमति वस्तुओं के उद्देश्य bind
से दिया जाता है अतिरिक्त तर्क पारित होने के लिए: तर्क पहले से परे भी एक प्रकार है कि किसी भी समझ में आता है की होने के लिए नहीं है? यह त्रुटियों को संकलित करने की अनुमति देता है जिसे किसी और जगह अस्वीकार कर दिया जाएगा।
क्या कंपाइलर? मुझे लगता है कि यह सिर्फ एक गैर-अनुरूप कंपेलर हो सकता है (क्योंकि उन अतिरिक्त तर्कों को वास्तव में कोई समझ नहीं आता है और मुझे संदेह है कि मानक इस अनुमति देता है)। उदाहरण के लिए एमएसवीसी अधिकतम भिन्न टेम्पलेट तर्क लेने और कुछ एनआईएल-प्रकार को डिफॉल्ट करने के लिए प्रत्येक वैरिएड टेम्पलेट को परिभाषित करके विविध टेम्पलेट्स को अनुकरण करता है। शायद ऐसा कुछ आपके व्यवहार का कारण है? –
@ क्रिस्टियन राउ: यह मानक का हिस्सा है। यह भी टीआर 1 का हिस्सा था। 20.8.2/4 टिप्पणी करता है कि अपेक्षित कार्यान्वयन एक भिन्नता-टेम्पलेटलाइज्ड 'ऑपरेटर()' के लिए है जो कि जो भी पास हो गया है, उसे लेने के लिए, तर्कों के प्रकार या संख्या के बावजूद। टीआर 1 में समान शब्द है। – KnowItAllWannabe
आपके मामले में, f (w1, ..., wN) जहां 'N = sizeof ... (bound_args)' (कॉल को बाध्य करने के लिए तर्कों की संख्या) मान्य अभिव्यक्ति होगी, 20.8.9.1.2/2 देखें और 20.8.2/1। संपादित करें: यह इसे कॉल करने के किसी अन्य तरीके को अस्वीकार नहीं करता है। – dyp