我正在开发一个Box2d项目。
在特定的类构造函数中,我这样做:
this->body->SetUserData(this);
其中body
是此类的成员。 body的类型为b2Body
。
稍后,我称之为方法:
body->GetUserData();
GetUserData()
返回void*
如何确定void*
类指向哪种类型?
编辑:对于那些不使用Box2d的人,可以将用户数据设置为包含所有非物理相关逻辑等的包装类,而b2Body代表物理主体。
编辑:例如,在Objective-C中,可以将void*
投射到NSObject*
,然后调用isMemberOf
来确定它是否属于特定类型。
答案 0 :(得分:3)
C ++没有任何内在功能可以让你确定void *指向的类型。你最好的选择可能是:
答案 1 :(得分:1)
使用void*
是一个古老的C技巧,如何将用户可配置的数据添加到库中。这通常在将中间件库集成到更大的软件中时使用。这里的基本假设是你知道void*
背后的类型。根据我在包装ODE和Bullet方面的经验,这非常有效。
基本上有两种情况,每种情况都知道void*
背后的基本类型:
在第一种情况下,您在包装软件中的主体或几何与对象之间存在一对一的关联。在这种情况下,您只需reinterpret_cast
到包装对象。
在第二种情况下,身体或几何体包含在某些游戏对象中#34;。这可以是场景中的任何对象。但通常所有"对象都在场景中#34;共享一个共同的基类。在这里,您只需假设您可以reinterpret_cast
到基类。现在你手中有一个物体,你从这里做的事情取决于你。您可以在其上调用虚拟方法,使用dynamic_cast
或一些自制反射。