Q1) यह देखते हुए कि हमारे पास
या हम कैसे परिभाषित करते हैं कुछ फ़ंक्शन के लिए। मान लें कि हम एक वस्तु को यद्यपि हम लौटाया त्रुटि निम्न जैसा है: या यह स्पष्ट नहीं है कि सही प्रकार पारित किया गया है , और शायद हमें ऐसा करने की अनुमति नहीं है (?) नोट: कुछ जवाब अच्छी तरह से काम करते हैं, मैं आज कुछ समय के लिए आपको उत्तर दूंगा। यह सुबह 6.30 बजे है और मैं अभी तक सो नहीं पाया। मैं जो लागू कर रहा हूं, उसके लिए मेरा पूरा डिज़ाइन पैटर्न शायद गलत है, उम्मीद है कि मैं थोड़ी देर बाद समझा सकता हूं। पाठ "> यह अनुक्रमित है, परन्तु सबसे अच्छा यह है कि मैं समझ नहीं पाया कि वास्तव में आप वास्तव में क्या करने की कोशिश कर रहे हैं: 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 विंडोज़ मिनजीड पर
#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