我正在开发一个 Box2d 项目。
在特定的类构造函数中,我这样做:
this->body->SetUserData(this);
其中body
是此类的成员。 body 的类型为 b2Body
。
稍后,我调用一个方法:
body->GetUserData();
GetUserData()
返回 void*
如何确定 void*
指向什么类型的类?
编辑:对于那些不使用 Box2d 的人,您可以将用户数据设置为包含所有非物理相关逻辑等的包装类,而 b2Body 代表物理体。
编辑:例如,在 Objective-C 中,可以将 void*
转换为 NSObject*
,然后调用 isMemberOf
来确定它是否属于特定类型。
最佳答案
C++ 没有任何内在的东西可以让您确定 void* 指向的类型。您最好的选择可能是:
- 创建一个抽象基类,所有用户数据项都将从该基类派生。也许你已经拥有了一个。然后您可以假设 void* 始终是从该基派生的类型,并相应地使用它。
- 创建一个可区分的 union 类型(或使用 Boost.Variant),并始终让 void* 指向其中之一。
- 创建一个小型结构体,其中 void* 将始终指向其实例,并使该结构体成为您分配给 void* 的所有内容的第一个成员(这仅在您进行更多 C 风格编程时才有效) ,并且这些类没有干扰对齐的碱基)。
关于c++ - 如何确定返回为 void * 的指针的类型(Class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24262038/