c++ - 如何确定返回为 void * 的指针的类型(Class)?

标签 c++ box2d

我正在开发一个 Box2d 项目。

在特定的类构造函数中,我这样做:

this->body->SetUserData(this);

其中body是此类的成员。 body 的类型为 b2Body

稍后,我调用一个方法:

body->GetUserData();

GetUserData() 返回 void*

如何确定 void* 指向什么类型的类?

编辑:对于那些不使用 Box2d 的人,您可以将用户数据设置为包含所有非物理相关逻辑等的包装类,而 b2Body 代表物理体。

编辑:例如,在 Objective-C 中,可以将 void* 转换为 NSObject*,然后调用 isMemberOf 来确定它是否属于特定类型。

最佳答案

C++ 没有任何内在的东西可以让您确定 void* 指向的类型。您最好的选择可能是:

  1. 创建一个抽象基类,所有用户数据项都将从该基类派生。也许你已经拥有了一个。然后您可以假设 void* 始终是从该基派生的类型,并相应地使用它。
  2. 创建一个可区分的 union 类型(或使用 Boost.Variant),并始终让 void* 指向其中之一。
  3. 创建一个小型结构体,其中 void* 将始终指向其实例,并使该结构体成为您分配给 void* 的所有内容的第一个成员(这仅在您进行更多 C 风格编程时才有效) ,并且这些类没有干扰对齐的碱基)。

关于c++ - 如何确定返回为 void * 的指针的类型(Class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24262038/

相关文章:

c++ - set_union 与 multiset 容器?

cocos2d-iphone - 正确的滑动手势识别器 iOS

c++ - CUDA __host__ __device__ 变量

c++ - 错误 C2296 : '%' : illegal, 左操作数在 C++ 中的类型为 'double'

c++ - 可能的 ComputeCPP SYCL 错误读取嵌套缓冲区

ios - 带纹理贴图的 box2d Spring 网格

iphone - 将功能分离到类中,与世界对象通信(cocos2d/box2d)

android - box2d 角速度

ios - 单面平台 (Box2D/Cocos2D)

C++11 : Is it possible to give fixed-template-parameted template to varidic-template-template-parameter?