wie cast von void* auf shared_ptr<mytype>
Ich habe ein problem mit einem OpenGL Projekt, Konvertierung von einem void*
Zeiger auf eine shared_ptr<mytype>
.
Bin ich mit Kugel setzen von Zeigern auf den starren Körper mit:
root_physics->rigidBody->setUserPointer(&this->root_directory->handle);
Den Griff Typ shared_ptr<mytype>
.
Den void*
- Zeiger zurückgegeben, indem Sie Kugel-library-Funktion, getUserPointer()
:
RayCallback.m_collisionObject->getUserPointer()
Zu konvertieren zurück zu mytype
, static_cast
funktioniert nicht:
std::shared_ptr<disk_node> u_poi = static_cast< std::shared_ptr<disk_node> >( RayCallback.m_collisionObject->getUserPointer() );
Den Fehler bei der Kompilierung:
/usr/include/c++/4.8/bits/shared_ptr_base.h:739:39: error: invalid conversion from ‘void*’ to ‘mytype*’ [-fpermissive]
Irgendeine Idee, wie ich das umwandeln kann von der void*
zurückgegeben getUserPointer()
zu shared_ptr<mytype>
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da, den Sie speichern eine Zeiger zu einer Instanz von
std::shared_ptr
Sie müssen gegossen, der zurückgegeben Wert vongetUserPointer
zustd::shared_ptr<>*
statt nurstd::shared_ptr<>
.std::shared_ptr
) zuerst.(*u_poi)->name
sollte den trick tun.void
Zeiger auf diese Weise ist es üblich. Es ist nicht sicher, aber da gibt es null prüft oder garantiert, dass der Zeiger ist, was Sie denken, es ist. Es sei denn, Sie sind erforderlich, um einenvoid
Zeiger (d.h. interface mit einem C-Bibliothek) sollten Sie vermeiden diesen Ansatz und verwenden Sie stattdessen eine polymorphe base-Schnittstelle.Das ist, was reinterpret_cast ist für:
reinterpret_cast
ist hier überflüssig und gefährlich. Dastd::shared_ptr<disk_node>*
werden können implizit invoid*
static_cast
ist mehr als glücklich zu konvertierenvoid*
zustd::shared_ptr<disk_node>*
.