मैं बहुत की तरह एक विधि के माध्यम से एक std :: समारोह पारित करने के लिए प्रयास कर रहा हूँ के रूप में समारोह:C++ 0x std :: एक विधि तर्क
class dispatch
{
public:
deliver(std::function<void (void)> task);
}
यह अपेक्षा के अनुरूप काम करता है। हालांकि मैं कार्य के रूप में आपूर्ति की गई कुछ विधियों के लिए तर्क पारित करना चाहता हूं लेकिन सभी अलग-अलग फ़ंक्शन < ...> रूपों के लिए अधिभार बनाना नहीं चाहता।
उदाहरण के लिएतरह
deliver(std::function& task);
इस प्रकार यह बिल्कुल संभव सिर्फ एक विधि बनाने के लिए और बस के साथ
dispatch->deliver(bind(&Object::method, X));
या
dispatch->deliver(bind(&Object::method, X, arg1, arg2));
आदि आह्वान ...
हैधन्यवाद हर इनपुट के लिए। यह दिखाई देगा कि मेरी वास्तविक गलती प्रेषण के लिए कॉल के साथ है-> अतिरिक्त तर्क के साथ वितरित करना भी एक बाध्य कॉल है।
dispatch->deliver(bind(&Object::method1, X1, bind(&Object::method1, X2));
error: /usr/include/c++/v1/functional:1539:13: error: no matching function for call to '__mu_expand' return __mu_expand(__ti, __uj, __indices());
कक्षा घोषणा के बाद '' 'गुम है। :-) –