答案 0 :(得分:1)
首先,C ++风格的界面现在在像Lua这样的语言中有很大意义。要使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 ++接口。如果你需要从Lua扩展C ++类的功能,你应该按照here描述的那样将它包装到Lua对象中,并按照here的说明进行“metatable”继承。另请阅读Lua手册中的section on Object Oriented Programming。
答案 1 :(得分:1)
通过按住指向lua状态的指针将表存储在c ++类中,并使用此API指定为表返回的引用:
http://www.lua.org/pil/27.3.2.html
然后,当调用包装类上的方法时,将引用的对象推入堆栈并执行必要的函数调用