1

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

4

2 回答 2

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 手册中有关面向对象编程的部分。

于 2009-11-23T11:49:06.527 回答
1

通过持有指向 lua 状态的指针以及使用此 API 指定的为表返回的引用,将表存储在 c++ 类中:

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

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

于 2010-01-13T15:13:07.157 回答