[boost::shared_ptr] *** downcast, wie?
-
Hallo, folgendes Problem:
struct Basis {virtual ~Basis(){} }; struct Derived : public Basis {}; int main() { Basis* ptr = new Derived(); Derived* ptrDerived = dynamic_cast<Derived*>(ptr); }so und wie funzt das analog mit:
boost::shared_ptr<Basis> ptr(new Derived); boost::shared_ptr<Derived> ptrDerived = dynamic_cast<Derived*>(ptr); //<-funzt natürlich nicht! :rolleyes:gruß, SirAnn
-
Gibt es keine Methode, die den Pointer zurückliefert? Gleich mal gucken.
Edit: Entweder shared_ptr::get() oder get_pointer(shared_ptr&)
Aber für dich das richtige ist wohl eher:
dynamic_pointer_cast
template<class T, class U>
shared_ptr<T> dynamic_pointer_cast(shared_ptr<U> const & r);
Requires: The expression dynamic_cast<T*>(r.get()) must be well-formed and its behavior defined.Returns:
When dynamic_cast<T*>(r.get()) returns a nonzero value, a shared_ptr<T> object that stores a copy of it and shares ownership with r;
Otherwise, an empty shared_ptr<T> object.
Throws: nothing.Notes: the seemingly equivalent expression
shared_ptr<T>(dynamic_cast<T*>(r.get()))
will eventually result in undefined behavior, attempting to delete the same object twice.
Von http://www.boost.org/libs/smart_ptr/shared_ptr.htm#Members
-
ahh, ich blinder vollhonk... bin etwas überarbeitet und habe gleich google bemüht ohne in der references zu schauen. ein noob-fehler... aber was soll's.
1000 dank. das haut natürlich hin...
aber der vollständigkeit halber:
so geht's:
boost::shared_ptr<Derived> ptrDerived = boost::dynamic_pointer_cast<Derived>(ptr);wie gewohnt ist eben ptr.get()==NULL, wenne s nicht geklappt hat bzw !ptr==true