C++使用(void*)转换为int进行比较?

Jem*_*Jem 1 c++ int casting objective-c void-pointers

我(尝试)在ObjC项目中编写一些(工作)C++ :-) C++库(Box2D)为我提供了一个b2Fixture类,它具有"用户数据"属性,供编码人员存储与他们相关的内容.

在我的例子中,它只需要存储一个整数.从我在ObjC中的主程序,一个是将整数转换为void*:

headFixture->SetUserData( (void*) 10 );
Run Code Online (Sandbox Code Playgroud)

在程序的C++方面的实用程序方法中,我想将用户数据与给定的整数进行比较(即它们是常数,10 =实地,11 =平台等).

第一次比较使用(void*)拒绝编译.在SO上找到了一种不同的方法,如第二次比较所示,它使用*((intptr_t*)...).那个编译,但它发送EXC_BAD_ACCESS:

bool AbstractContactListener::contactContainsType(JRContact contact, int type){

    if (( type == ( (void *) contact.fixtureA->GetUserData() )) ||
        ( type == *( (intptr_t *) contact.fixtureB->GetUserData() ))
        ) {
        return true;
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

我已经没有想法来解决这个问题了.请帮忙:-)谢谢!J.

编辑/解决方案:

bool AbstractContactListener::contactContainsType(JRContact contact, int type){

    if (( type == (intptr_t) contact.fixtureA->GetUserData() ) ||
        ( type == (intptr_t) contact.fixtureB->GetUserData() )
        ) {
        return true;
    };

    return false;
}
Run Code Online (Sandbox Code Playgroud)

这个对我有用!

Pub*_*bby 5

我不确切地知道你要做什么,但你可能应该将数据转换回你想要的类型:

if (( type == reinterpret_cast<int>(contact.fixtureA->GetUserData() )) ||
    ( type == reinterpret_cast<int>(contact.fixtureB->GetUserData() ))
    ) {
Run Code Online (Sandbox Code Playgroud)