这是我尝试代表的一个简单问题的尝试:

Renderable* test1 = *(Renderable**) pointerToObject;
StaticObject* test2 = *(StaticObject**) pointerToObject;
test1->setTransparency(0.5f); // Crash here.
test2->setTransparency(0.75f); // Works here.


pointerToObject类型是void*,但实际上它指向对象的指针(例如Renderable**)。
Renderable是抽象类,StaticObject是实现Renderable的子类。
编译后,程序在test1->set()方法上崩溃,但可以在test2->set()下使用。

是否可以在不了解test1的情况下从pointerToObject获取有效的StaticObject对象?

编辑
这是我存储此指针的方式:

StaticObject** udata = (StaticObject**) lua_newuserdata(state, sizeof(StaticObject*));
*udata = object;


objectStaticObject的指针。我只是注意到sizeof(StaticObject*)可能是我遇到问题的原因。 methdod的文档在这里:lua_newuserdata。在不修改lua_newuserdata方法的情况下,还有什么方法可以实现我想要的?

最佳答案

renderable对象的类型是什么?通常,如果将指针转换为void*(不需要强制转换),则必须将其转换回其原始类型(需要强制转换)才能使用它。因此,如果renderable的类型为StaticObject,则test1的使用无效。

StaticObject renderable;
void *pointerToObject = &renderable;
Renderable* test1 = (Renderable*)pointerToObject;     // invalid pointer
StaticObject *test2 = (StaticObject*)pointerToObject; // okay

关于c++ - C++ C样式将指针转换为指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19790498/

10-11 22:36
查看更多