I have a problem with an OpenGL project, converting from a void* pointer to a shared_ptr<mytype>.
I am using Bullet to set pointers on the rigid body with:
root_physics->rigidBody->setUserPointer(&this->root_directory->handle);
The handle is of type shared_ptr<mytype>.
The void* pointer is returned by Bullet's library function, getUserPointer():
RayCallback.m_collisionObject->getUserPointer()
To convert back to mytype, static_cast is not working:
std::shared_ptr<disk_node> u_poi = static_cast< std::shared_ptr<disk_node> >( RayCallback.m_collisionObject->getUserPointer() );
The error, at compilation time:
/usr/include/c++/4.8/bits/shared_ptr_base.h:739:39: error: invalid conversion from ‘void*’ to ‘mytype*’ [-fpermissive]
Any idea how I can convert from the void* returned by getUserPointer() to shared_ptr<mytype>?
Since you are storing a pointer to an instance of std::shared_ptr you need to cast the value returned by getUserPointer to std::shared_ptr<>* instead of just std::shared_ptr<>.
std::shared_ptr<disk_node>* u_poi
= static_cast< std::shared_ptr<disk_node>* >(RayCallback.m_collisionObject->getUserPointer());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With