के सक्षम_shared_from_this को कैसे सक्षम करें मेरे पास सरल आधार और व्युत्पन्न कक्षा है जो मैं चाहता हूं कि दोनों shared_from_this()
हों।दोनों माता-पिता और derived
यह सरल उपाय: "googling" के बाद
shared_ptr<foo> ptr(shared_ptr<foo>(new bar1));
function<void()> f=ptr->get_callback();
f();
तो मैं समाधान निम्नलिखित पाया है:
class foo : public enable_shared_from_this<foo> {
void foo_do_it()
{
cout<<"foo::do_it\n";
}
public:
virtual function<void()> get_callback()
{
return boost::bind(&foo::foo_do_it,shared_from_this());
}
virtual ~foo() {};
};
class bar1 : public foo , public enable_shared_from_this<bar1> {
using enable_shared_from_this<bar1>::shared_from_this;
void bar1_do_it()
{
cout<<"foo::do_it\n";
}
public:
virtual function<void()> get_callback()
{
return boost::bind(&bar1::bar1_do_it,shared_from_this());
}
};
निम्नलिखित कोड में अपवाद tr1::bad_weak_ptr
कारण
class bar2 : public foo {
void bar2_do_it()
{
cout<<"foo::do_it\n";
}
shared_ptr<bar2> shared_from_this()
{
return boost::static_pointer_cast<bar2>(foo::shared_from_this());
}
public:
virtual function<void()> get_callback()
{
return boost::bind(&bar2::bar2_do_it,shared_from_this());
}
};
और अब यह काम करता है।
क्या माता-पिता और बच्चे दोनों के लिए enable_shared_from_this
पर कोई बेहतर और अधिक समृद्ध और सही तरीका है?
धन्यवाद
मैं इसे स्वयं को लागू करने की कोशिश की है, और यह वास्तव में उस मुश्किल नहीं है। 'My :: SmartPointer 'में, जांचें कि टी' My :: enableSmartFromThis' से लिया गया है या नहीं। यदि ऐसा है, तो ढेर पर एक संदर्भ काउंटर आवंटित न करें, लेकिन 'My :: enableSmartFromThis' के सदस्यों का उपयोग करें। अब 'मेरा :: GetSmartFromThis (यह)' मामूली हो जाता है, यह '' 'को' My :: enableSmartFromThis * 'में परिवर्तित कर सकता है और मौजूदा संदर्भ गणना पा सकता है। आप यह भी जांच सकते हैं कि क्या आप बेस से व्युत्पन्न में कनवर्ट करने का प्रयास कर रहे हैं, जब केवल व्युत्पन्न 'My :: enableSmartFromThis' से प्राप्त होता है। –
MSalters