Sunday 15 June 2014

c++ shared_ptr with std::function or double (*SOME_NAME)(double); -


Q1) यह देखते हुए कि हमारे पास

typedef डबल (* function_t) (डबल);

या

typedef std :: function & lt; डबल (डबल) & gt; Function_t;

हम कैसे परिभाषित करते हैं

std :: shared_ptr & lt; function_t & gt; Ptr_func = ???

कुछ फ़ंक्शन के लिए। मान लें कि हम एक वस्तु को shared_ptr चाहते हैं, जिसे पहले से परिभाषित किया गया है (अब के लिए भूलना यह उद्देश्य को हरा देता है - लेकिन मुझे इसकी आवश्यकता है)। एक उदाहरण के रूप में डबल

  struct null_deleter {void operator () (शून्य const *) const {} के प्रकार के लिए निम्नलिखित पर विचार करें; }; Int main () {// परिभाषित वस्तु डबल बी = 0; // परिभाषित साझा सूचक std :: shared_ptr & lt; डबल & gt; ptr_store; ptr_store.reset (एंड बी, null_deleter ()); // यह काम करता है और आप की अपेक्षा कैसे करते हैं)   

यद्यपि हम shared_ptr प्रकार function_t के लिए ऐसा करते हैं, अर्थात

  डबल एफ (डबल एक्स) {// some_function + return} int main () {// परिभाषित साझा सूचक std :: shared_ptr & lt; function_t & gt; ptr_store; ptr_store.reset (& amp; च, null_deleter ()); // त्रुटि: काम नहीं करता है}   

लौटाया त्रुटि निम्न जैसा है:

  त्रुटि: 'डबल' (*) (डबल) 'से' डबल (**) (डबल) 'आरम्भिकरण में   

या std :: function

  त्रुटि: 'डबल (*) (डबल)' से 'std :: function & lt; डबल (डबल) & gt; *' initialization में परिवर्तित नहीं किया जा सकता   

यह स्पष्ट नहीं है कि सही प्रकार पारित किया गया है , और शायद हमें ऐसा करने की अनुमति नहीं है (?)

नोट: जी ++ 4-7-2 संस्करण -std = c ++ के साथ संकलित 11-ओ 3 विंडोज़ मिनजीड पर

कुछ जवाब अच्छी तरह से काम करते हैं, मैं आज कुछ समय के लिए आपको उत्तर दूंगा। यह सुबह 6.30 बजे है और मैं अभी तक सो नहीं पाया। मैं जो लागू कर रहा हूं, उसके लिए मेरा पूरा डिज़ाइन पैटर्न शायद गलत है, उम्मीद है कि मैं थोड़ी देर बाद समझा सकता हूं। पाठ ">

यह अनुक्रमित है, परन्तु सबसे अच्छा यह है कि मैं समझ नहीं पाया कि वास्तव में आप वास्तव में क्या करने की कोशिश कर रहे हैं:

  #include & lt; iostream & gt; Typedef std :: समारोह & lt; डबल (डबल) & gt; function_t; डबल एफ (डबल टी) {रिटर्न टी * 5; } Int main (int argc, char * argv []) {// आप आमतौर पर साझा सूचक को गतिशील रूप से आवंटित वस्तु std :: shared_ptr & lt; function_t & gt; से जोड़ना चाहते हैं। ptr; Ptr.reset (नया function_t (std :: bind (& amp; एफ, std :: प्लेसहोल्डर्स :: _ 1))); Std :: cout & lt; & lt; (* Ptr) (5.0); // लेकिन हम स्मार्ट पॉइंटर को स्टैक (बैड आईडीईए) function_t fff = std :: bind (& amp; एफ, std :: placeholders :: _ 1) पर एक स्थानीय फंक्शन ऑब्जेक्ट में संलग्न कर सकते हैं; ptr.reset (& amp; FFF); Std :: cout & lt; & lt; (* Ptr) (5.0); }    

No comments:

Post a Comment