2014-11-26 13 views
5

अगर मैं बाध्यकारीC++ std :: बाँध rebind समारोह

std::bind(memberFunctionPointer, objectPointer, _1, _2); 

यह तो संभव है "rebind" करने के लिए इसे बाद में प्लेसहोल्डर के कुछ/सभी को बदलने के लिए के समय में इस तरह एक समारोह, प्लेसहोल्डर का उपयोग कर बाँध , लेकिन समारोह बुलाए बिना? मैं कुछ पैरामीटर में पास करने में सक्षम होना चाहता हूं और फिर इसे स्टोर करना चाहता हूं, जिसे बाद में बुलाया जा सकता है। (देरी कॉलबैक)

उत्तर

8

आप फिर से bind कर सकते हैं:

auto f = std::bind(memberFunctionPointer, objectPointer, _1, _2); 

auto g = std::bind(f, val1, val2); 

g(); // (objectPointer->*memberFunctionPointer)(val1, val2) 
+0

ध्यान दें कि यह उदाहरण (सही) में च और छ वस्तुओं पूरी तरह से अलग अलग प्रकार की है। मैं अलग-अलग ऑब्जेक्ट्स को बांधना चाहता था क्योंकि वे मेरे कोड में विभिन्न स्थानों में उपलब्ध/बनाए गए थे, और इसका मतलब है कि std :: function ऑब्जेक्ट को पास करने के लिए उपयोग किए गए हस्ताक्षर को भी बदलना है। – tweej

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