到目前为止,我所做的所有谷歌搜索都发现了非常接近的事情,但并不是因为我正在努力做的事情.
让我以最基本的方式描述这个:
想象一下,你有一个C++类
class A
{
public:
int Method();
int Variable;
};
Run Code Online (Sandbox Code Playgroud)现在想象你实例化A*Foo;
现在假设你有一个带有这个3行函数的.lua文件:
function Test()
local n = Foo:Method();
Foo.Variable = 0;
local m = Foo.Variable;
end
Run Code Online (Sandbox Code Playgroud)如何将对象A*绑定到lua,以便所有这些都可行?
伪代码,我的第一次尝试是这样的,部分来自复制粘贴的例子:
这样做时,Foo:Hide(); 成功调用了我的静态函数,它成功解压缩指针并调用其成员Hide().
到目前为止很好:Method().
然后我尝试支持.Variable访问.每个人似乎都说要再次使用metatables来覆盖__index和__newindex并使它们成为一种通用的Get/Set,其中你支持某些键作为有效的变量链接,例如if(key =="Variable")Variable = val;
这也很好.
问题是试图把这两件事放在一起.只要使用适用于Variable的getter/setter覆盖__index/__ newindex,Method()调用就不再调用Method()静态函数,而是进入你绑定的__index函数.
所有这些都说,如何支持这种看似基本的用例组合?
实际的代码片段比纯粹的理论喋喋不休更受欢迎.
提醒:请仅使用基本的C API进行回复,而不是第三方的回复.
Method() 调用不再调用 Method() 静态函数,而是进入您绑定的 __index 函数。
因此对其进行编程,以便如果表中存在该键,则首先返回该键,否则使用 getter/setter。