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

是否可以使用LuaSWIG,并使用IInterface类来实现该接口并在Lua中实例化它?如果可以的话,应该如何实现?

原文链接 https://stackoverflow.com/questions/1782337

点赞
stackoverflow用户133520
stackoverflow用户133520

首先,像 Lua 这样的语言中,C++ 风格的接口并没有太大意义。对于一个 Lua 对象来说,要想符合一个接口,它只需要包含该接口中所有函数的定义即可,不需要特定的继承。例如,如果你有这样一个 C++ 接口:

// 表示一个通用的银行账户
class Account {
    virtual void deposit(double amount) = 0;
};

你可以在 Lua 中实现它,而不需要特定的继承规定:

SavingsAccount = { balance = 0 }
SavingsAccount.deposit = function(amount)
    SavingsAccount.balance = SavingsAccount.balance + amount
end

-- 使用方法
a = SavingsAccount
a.balance = 100
a.deposit(1000)

简而言之,并不需要 C++ 接口。如果你需要在 Lua 中扩展一个 C++ 类的功能,应该将它封装成为一个 Lua 对象,如 这里所述,并像这里所解释的那样进行“元表”继承。还应该阅读 Lua 手册中关于面向对象编程的章节。

2009-11-23 11:49:06
stackoverflow用户57482
stackoverflow用户57482

使用指向 Lua 状态的指针,并使用以下 API 返回的引用将表格存储在 C++ 类中:

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

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

2010-01-13 15:13:07