如何转换由box2d返回的void指针

How to cast void pointer returned by box2d?

本文关键字:返回 box2d void 指针 何转换 转换      更新时间:2023-10-16

我有一个包含b2Body的包装器类。

class Wrapper{
public:
     b2Body *body
     Wrapper(b2World &world){
         //Create the b2Body
        body->SetUserData(this);
     }
}

现在b2Body有一个函数GetUserData(),返回void*

因为我知道一个事实,void*必须是类型包装,我试图强制转换它。

b2Body* bodies = world->GetBodyList();
    while (bodies) {
        if (bodies->GetUserData()!=NULL) {
            Wrapper *wrapper = (Wrapper*)bodies->GetUserData();;

但是无论如何强制转换,对象的实际成员值都是不正确的。

将void *转换为我的类类型以便我可以获得正确的值的正确方法是什么?

编辑:我试图做什么是在这个教程中描述,但它不工作。

http://www.iforce2d.net/b2dtut/user-data

我的"Wrapper"类(相当于教程中的"Ball")的成员变量有不正确的值。我也试过静态类型转换。

编辑:以下作品:

 //setting and retrieving an integer
  int myInt = 123;
  body->SetUserData( (void*)myInt );
  ...later...
  int udInt = (int)body->GetUserData();

    this->body->SetUserData((void*)this);
    ..later....
    Wrapper *wrapper = (Wrapper*)(bodies->GetUserData());

包装器的所有成员变量不是不正确就是NULL。即使Wrapper应该包含我们调用GetUserData()的指针b2Body,我们通过Wrapper ->body访问的b2Body也将其大部分成员设置为NULL。为什么会这样?

你想试试 reinterpret_cast<Wrapper*>:

Wrapper* wrapper = reinterpret_cast<Wrapper*>(bodies->GetUserData());