我的OpenGL项目有问题,从void*
指针转换为shared_ptr<mytype>
。
我使用Bullet在刚体上设置指针:
root_physics->rigidBody->setUserPointer(&this->root_directory->handle);
句柄的类型为shared_ptr<mytype>
。
Bullet的库函数void*
返回getUserPointer()
指针:
RayCallback.m_collisionObject->getUserPointer()
要转换回mytype
,static_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>
吗?
答案 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)
我认为有一种更简单的方法:
void*
更改为disk_node*
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());