我是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用一些注册的课程来包装参考文献,但我找不到任何工作
答案 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。还有其他方法;这真的取决于你的要求。