web-dev-qa-db-de.com

static_cast mit boost :: shared_ptr?

Was ist das Äquivalent eines static_cast mit boost::shared_ptr?

Mit anderen Worten, wie muss ich das Folgende umschreiben?

Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);

beim Benutzen shared_ptr?

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
72
Frank

Verwenden boost::static_pointer_cast:

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
105
Frank

Es gibt drei Besetzungsoperatoren für intelligente Zeiger: static_pointer_cast, dynamic_pointer_cast, und const_pointer_cast. Sie befinden sich entweder im Namespace boost (bereitgestellt von <boost/shared_ptr.hpp>) oder Namespace std::tr1 (entweder von Boost oder von der TR1-Implementierung Ihres Compilers bereitgestellt).

22

Als Kommentar: Wenn Derived tatsächlich von Base abgeleitet ist, sollten Sie einen dynamic_pointer_cast anstelle von statischen Casts verwenden. Das System hat die Möglichkeit zu erkennen, wann/ob Ihre Besetzung nicht korrekt ist.

Es ist erwähnenswert, dass es einen Unterschied in der Anzahl der von Boost bereitgestellten Casting-Operatoren und den Implementierungen von TR1 gibt.

Der TR1 definiert nicht den dritten Operator const_pointer_cast ()

2
mloskot