使用SWIG在Lua中实现和继承C ++类

时间:2009-11-23 10:45:20

标签: c++ lua swig

是否可以使用LuaSWIG并说一个IInterface类来实现该接口并在Lua中实例化它?如果是这样,怎么办呢?

2 个答案:

答案 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

然后,当调用包装类上的方法时,将引用的对象推入堆栈并执行必要的函数调用