我该如何绑定int& f(无效)使用luabind?

时间:2013-12-17 16:07:31

标签: c++ lua luabind

我是luabind的新手,我正在努力寻找一个可能很愚蠢的问题的答案。

我们说我得到了这个:

int x = 0;

int& f(void)
{
    return x;
}

如何使用luabind绑定f?

简单

module(L)
[
    def("f", &f)
];
当我在lua脚本中调用f()时,

会导致此错误

Error: std::runtime_error: 'Trying to use unregistered class'

我想必须有一种方法可以告诉luabind用一些注册的课程来包装参考文献,但我找不到任何工作

1 个答案:

答案 0 :(得分:1)

Lua的情况有所不同:

x = 123
function f() return x end
a = f()
x = 456
print(a) -- prints 123

这意味着你不能直接包装C ++ f()以便在Lua中使用;你必须问自己这个操作的含义是什么,你将如何在Lua端使用此操作,然后在Lua中创建等效操作。如果可以修改C ​​++级别,那么您将获得与其不同的解决方案。

示例:f返回对全局的引用,可能是为了以后可以修改全局(如果它返回const int&这将是一个不同的问题)。你会怎么在Lua做到这一点?您可以将可以在表中引用的全局变量放入表中并将索引返回到表中:

g = {x = 123}
function f() return 'x' end
at = f()
print(at.x) -- prints 123
g.x = 456
print(at.x) -- prints 456

另一种可能性是创建一个表并设置其元表,使得a.x在_G中取代'x'而不是a。还有其他方法;这真的取决于你的要求。