[英]C++ Factory using lua
我有一个脚本,其中:
该脚本的用法如下:
Script* script("someFile");
script->GetValue("Type", type);
Object* obj = CreateObject(type);
obj->Load(script);
其中从对象加载函数用于加载其余obj参数。 现在,我将脚本语言更改为lua。 我的问题是:
我应该保持这种创建对象的方式(仅将lua用于数据)还是应该在lua中公开工厂并从lua中使用它,就像这样(在lua中):
CreateObject("someType")
SetProperty(someObj, someProperty, someValue)
首先,我想知道哪种更快,第一种或第二种方法。 您还有其他建议吗? 因为我正在重构这部分,所以我愿意接受其他建议。 我想保留lua,因为它速度快,易于集成且体积小。
您可以根据需要允许脚本环境创建或不创建C ++对象。 tolua ++使用所有的metatable功能来允许在lua中非常直接地操作您的c ++类型。
例如,此声明:
// tolua_begin
class SomeCppClass
{
public:
SomeCppClass();
~SomeCppClass();
int some_field;
void some_method();
};
// tolua_end
将自动生成lua绑定以允许此lua scipt:
#!lua
-- obj1 must be deleted manually
local obj1 = SomeCppClass:new()
-- obj1 will be automatically garbage collected
local obj2 = SomeCppClass:new_local()
obj1.some_field = 3 -- direct access to "some_field"
obj2:some_method() -- direct call to "some_method"
obj1:delete()
这种技术的优点是您的lua代码将与依赖的C ++代码非常一致。 参见http://www.codenix.com/~tolua/tolua++.html
在这种情况下,我更喜欢设置一个绑定的C函数,该函数将参数表作为参数。 因此,Lua脚本如下所示。
CreateObject{
Type = "someType"'
someProperty = someValue,
-- ...
}
该表将在回调函数中位于堆栈的顶部,并且可以使用lua_getfield通过名称访问所有参数。
您可能还需要调查Lua环境的沙箱 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.