当前我知道如何让C++对象实例化并在Lua中使用SWIG绑定传递,我需要的是相反的。用SWIG包装一个Lua对象以在C++中使用SWIG
我正在使用Lua & C++ & SWIG。
我有C++中的接口和lua中的对象,它们实现了执行相同工作并具有相同结构的方法。我希望能够在lua中实例化这些对象,并使用指向它们类似接口的指针在C++中传递它们。
因此,我可以想象创建一个接口的C++实现,它将充当所述lua对象的处理程序,但我不知道如何执行此操作。该类将充当在C++世界中的lua对象代表或代理。
为了澄清我应在回答中使用了类似的问题,我问下面的示例代码开始:
C++代码:
// Represents a generic bank account
class Account {
virtual void deposit(double amount) = 0;
};
Lua代码:
SavingsAccount = { balance = 0 }
SavingsAccount.deposit = function(amount)
SavingsAccount.balance = SavingsAccount.balance + amount
end
-- Usage
a = SavingsAccount
a.balance = 100
a.deposit(1000)
现在说我有一个名为C++的班级:
class Bank {
void AddAccount(Account* a);
};
我想这里是做在Lua以下机制:
SavingsAccount = { balance = 0 }
SavingsAccount.deposit = function(amount)
SavingsAccount.balance = SavingsAccount.balance + amount
end
-- Usage
a = SavingsAccount
bank:AddAccount(a)
如果我需要采取额外的步骤,如实例化一个C++类来充当代理,并通过它的LUA表用我所有的Lua函数等等,我可以想像它看起来像这样:
C++代码:
// Represents a generic bank account
class ProxyAccount : public Account {
virtual void deposit(double amount);
};
Lua代码:
SavingsAccount = { balance = 0 }
SavingsAccount.deposit = function(amount)
SavingsAccount.balance = SavingsAccount.balance + amount
end
-- Usage
a = SavingsAccount
a.balance = 100
a.deposit(1000)
proxy = program.ProxyAccount()
proxy.settable(a)
bank:AddAccount(p)
这里的问题是我不知道我将如何实现ProxyAccount类,甚至可设置的函数签名是什么样子......
在一个项目中,我可以在lua中移动很多东西,而不必用C++对象包装它们。我会失去一些灵活性,但我不能将必要的组件移入lua并重新获得我已经失去的一些东西 – 2009-12-30 18:48:07
然而,我有其他项目没有这种奢侈品,例如我有一个RTS AI项目,打算在卢阿实施'小工具'或'插件'来扩展单位行为。因此,我需要能够将这个lua代码与该对象关联起来,所以会有表格填充了我需要与我的各种行为和任务类相关联的方法和代码,以及在我现有的基础结构中使用它们的工作 – 2009-12-30 18:50:20
我会给你提问的,因为你提供了一个解决方案,虽然我很好奇你有什么更好的方法可以建议特别是AI情况 – 2009-12-30 18:51:38