奇怪的问题与luabind::object

我目前正在使用 Luabind,具体来说是 https://github.com/rpavlik/luabind,因为官方发布的版本已经过时,并且无法再与最新版本的 Boost 编译。

我遇到了一个非常奇怪的问题,在网上找不到任何解决方法。我成功地将例子简化为一个非常简单的场景。

在一个模块中,我将有:

luabind::object value;

void functionA() {
    lua_pushstring(L,"yo");
    luabind::object temp(luabind::from_stack(L,-1));
    value = temp;
}

在另一个模块中,我将有:

void functionB() {
    printf("My Value: %s\n",luabind::object_cast<const char*>(value));
    printf("My Original value type: %d\n",luabind::type(value));
    value.push(L);
    luabind::object a1(luabind::from_stack(L,-1));
    printf("My Copy value type: %d\n",luabind::type(a1));
}

当我使函数 A 和函数 B 在 Lua 中可用,并对它们进行连续调用时,输出将为:

My Value: yo
My Original value type: 4
My Copy value type: 0

如您所见,该对象仍然引用了 Luabind 可以打印的东西。但是,当我尝试将它推到栈上并从栈对象创建一个新对象时,它将导致空值。

这仅发生在这种特定情况下。当我把所有内容放到一个函数中时,它可以正常工作。当我将代码放到同一模块的函数中时,它也可以正常工作。我还没有制作一个独立的测试项目,但是我想不出在我的代码中有什么干扰,这些函数是直接从 Lua 中连续调用的。

我做错了什么吗?还是这是一个 bug?如果是一个 bug,为什么我从未听说过这样的事情?

原文链接 https://stackoverflow.com/questions/7235811

点赞
stackoverflow用户661171
stackoverflow用户661171

似乎我的测试用例不完整。functionB 也需要在由 luabind 封装的类中。我可以通过在类中制作一个代理函数并从中调用包含我的代码的全局函数来“解决”此问题。

2011-08-31 21:03:40