如何将void *转换为shared_ptr <mytype> </mytype>

时间:2014-04-21 19:17:17

标签: c++ pointers casting shared-ptr

我的OpenGL项目有问题,从void*指针转换为shared_ptr<mytype>

我使用Bullet在刚体上设置指针:

root_physics->rigidBody->setUserPointer(&this->root_directory->handle);

句柄的类型为shared_ptr<mytype>

Bullet的库函数void*返回getUserPointer()指针:

RayCallback.m_collisionObject->getUserPointer()

要转换回mytypestatic_cast无效:

std::shared_ptr<disk_node> u_poi = static_cast< std::shared_ptr<disk_node> >( RayCallback.m_collisionObject->getUserPointer() );

错误,在编译时:

/usr/include/c++/4.8/bits/shared_ptr_base.h:739:39: error: invalid conversion from ‘void*’ to ‘mytype*’ [-fpermissive]

知道如何从void*返回的getUserPointer()转换为shared_ptr<mytype>吗?

3 个答案:

答案 0 :(得分:7)

由于您将指针存储到std::shared_ptr的实例,因此您需要将getUserPointer返回的值转换为std::shared_ptr<>*而不是std::shared_ptr<> }}

std::shared_ptr<disk_node>* u_poi
  = static_cast< std::shared_ptr<disk_node>* >(RayCallback.m_collisionObject->getUserPointer());

答案 1 :(得分:0)

我认为有一种更简单的方法:

  1. void*更改为disk_node*
  2. disk_node*存储在shared_ptr中。

就像这样:

std::shared_ptr<disk_node> u_poi =
     static_cast<disk_node*>(RayCallback.m_collisionObject->getUserPointer());

答案 2 :(得分:-1)

reinterpret_cast的用途是什么:

reinterpret_cast<std::shared_ptr<disk_node>*>(RayCallback.m_collisionObject->getUserPointer());