实施和使用SWIG的Lua从C ++类的继承(Implementing and inheriting

2019-09-29 14:15发布

难道使用可能的Lua和SWIG说的IInterface类,以实现该接口,并在Lua实例这一切? 如果是的话会怎么做到呢?

Answer 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 ++类的功能,你应该换行到一个Lua对象描述这里和解释做“元表”继承这里 。 也可以参考面向对象编程部分在Lua的手册。



Answer 2:

通过保持一个指针到LUA状态存储在C ++类的表,并作为使用该API指定的引用返回该表:

http://www.lua.org/pil/27.3.2.html

然后,当对包装类的方法被调用时,推引用的对象到堆栈和做必要的函数调用



文章来源: Implementing and inheriting from C++ classes in Lua using SWIG
标签: c++ lua swig