mem_fn
और bind
की वापसी प्रकार है अनिर्दिष्ट। इसका मतलब है, तर्कों के आधार पर एक अलग प्रकार की वस्तु वापस आती है, और मानक विवरणों को निर्धारित नहीं करता है कि यह कार्यक्षमता कैसे कार्यान्वित की जानी चाहिए।
यदि आप यह जानना चाहते हैं कि किसी विशेष पुस्तकालय कार्यान्वयन (सैद्धांतिक हित के लिए, मुझे आशा है) के साथ किसी विशेष मामले में किस प्रकार का प्रकार है, तो आप हमेशा एक त्रुटि का कारण बन सकते हैं, और त्रुटि संदेश से प्रकार प्राप्त कर सकते हैं। E.g:
#include <functional>
struct X
{
double method(float);
};
int x = std::mem_fn(&X::method);
9 Untitled.cpp cannot convert 'std::_Mem_fn<double (X::*)(float)>' to 'int' in initialization
इस मामले में, ध्यान दें कि प्रकार का नाम आंतरिक उपयोग के लिए आरक्षित है। आपके कोड में, आपको किसी अग्रणी अंडरस्कोर (और पूंजी अक्षर) के साथ कुछ भी उपयोग नहीं करना चाहिए।
C++ 0x में, मुझे लगता है कि वापसी प्रकार होगा auto
:)
auto fun = std::mem_fn(&ClassA::method);
मैं 'उपयोग करने के लिए std :: tr1 :: समारोह <शून्य (MyType *)> मजेदार = std :: tr1 :: mem_fn (और ClassA :: विधि) कोशिश कर रहा हूँ,' लेकिन यह नहीं है संकलित करें, क्या गलत है? – Tarantula
@ टारनटूला: 'mem_fn' द्वारा लौटाया जाने योग्य कॉल करने योग्य ऑब्जेक्ट एक संदर्भ नहीं, संदर्भ नहीं लेता है। अद्यतन उत्तर देखें। –
अभी भी काम नहीं करता है, Func के लिए मेरा प्रोटोटाइप है: आभासी शून्य Func (MyType * तर्क) = 0; – Tarantula