luabind :: object的奇怪问题

时间:2011-08-29 20:48:51

标签: lua luabind

我目前正在使用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));
}

当我从lua中获取functionA和functionB并连续调用它们时,输出将是:

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

如您所见,该对象仍然引用了luabind可以打印的内容。但是当我尝试将它推入堆栈并从堆栈对象创建一个新对象时,它将导致nil值。

这只发生在这种特定情况下。当我把所有东西都放在一个函数中时,它运行正常。当我将代码放入同一模块的函数中时,它会正常工作。我还没有做过一个独立的测试项目,但是在我的代码干扰中我无法想到任何东西,这些函数是从lua直接连续调用的。

我做错了吗?或者这是一个错误?如果这是一个错误,为什么我从来没有听说过这样的事情?

1 个答案:

答案 0 :(得分:0)

看来我的测试用例不完整。 functionB也需要在luabind包装的类中。我可以通过使类中的函数成为代理函数并从那里调用包含我的代码的全局函数来“解决”该问题。