gpt4 book ai didi

c++ - 我应该如何使用 luabind 绑定(bind) int& f(void)?

转载 作者:太空宇宙 更新时间:2023-11-04 11:43:11 25 4
gpt4 key购买 nike

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

假设我有这个:

int x = 0;

int& f(void)
{
return x;
}

如何使用 luabind 绑定(bind) f?

简单

module(L)
[
def("f", &f)
];

当我在 lua 脚本中调用 f() 时导致此错误

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

我想一定有办法告诉 luabind 用一些已注册的类包装引用,但我找不到任何工作

最佳答案

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。还有其他方法;这真的取决于你的要求。

关于c++ - 我应该如何使用 luabind 绑定(bind) int& f(void)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20639022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com