我该如何使用luabind绑定int& f(void)函数?

我是 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 将引用包装在某个已注册的类中,但我找不到任何有效的方法。

点赞
用户869951
用户869951

Lua 中的情况不同:

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

这意味着你不能直接将 C++ 的 f() 包装以供 Lua 使用;你必须问问自己这个操作的含义是什么,在 Lua 端如何使用这个操作,然后创建相应的 Lua 等价物。如果能够修改 C++ 级别,那么你会有一个不同的解决方案。

例如:f 返回对全局变量的引用,假定后续可能修改该全局变量 (如果它返回 const int&,则会有一个不同的问题)。在 Lua 中该怎么做?你可以将可以引用的全局变量放在一个表中,并返回表中的索引:

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

另一种可能性是创建一个表,并设置它的元表,这样做 a.x 会从 _G 中取出 'x',而不是从表 a 中取。还有其他方式;它确实取决于你的需求。

2013-12-17 19:54:48