考虑以下使用LuaBridge将对象传递给 lua 脚本的示例:
class Test {
public:
double d;
Test(double t): d(t) {};
};
Test t1(10);
auto lua_state = luaL_newstate();
luaL_openlibs(lua_state);
luabridge::getGlobalNamespace(lua_state)
.beginNamespace("Core")
.beginClass<Test>("Test")
.addConstructor<void(*)(double)>()
.addData("d", &Test::d)
.endClass()
.addVariable("t1", &t1)
.endNamespace()
;
显然传递的变量不能被lua修改:
Core.t1.d = 12
print(Core.t1.d)
上面的代码打印10
。
同样在处理脚本后的 C++ 中,变量仍然保持其初始值。
luaL_dofile(lua_state, ".../test.lua");
std::cout << t1.d << std::endl; // 10
但是,可以修改不是对象成员的简单标量数据类型(如浮点数) 。我错过了什么吗?
编辑:Test t1(10);
如果我替换为Test *t1 = new Test(10);
或什Test t(10);
Test *t1 = &t;
至并且仍然传递&t1
给 addVariable
,它显然是可修改的。我不太了解这种行为,有人可以解释一下吗?(地址的地址?)