目前我知道如何使用 SWIG 绑定在 Lua 中实例化和传递 C++ 对象,我需要的是相反的。
我正在使用 Lua & C++ & SWIG。
我有 C++ 中的接口和 lua 中的对象,它们实现了执行相同工作并具有相同结构的方法。我希望能够在 lua 中实例化这些对象,然后使用指向它们类似的接口的指针在 C++ 中传递它们。
因此,我可以想象创建一个接口的 c++ 实现,它将充当所述 lua 对象的处理程序,但我不知道如何做到这一点。该类将充当 C++ 世界中的 lua 对象代表或代理。
为了澄清,我将从以下示例代码开始,该示例代码用于回答我提出的类似问题:
C++ 代码:
// Represents a generic bank account
class Account {
virtual void deposit(double amount) = 0;
};
卢阿代码:
SavingsAccount = { balance = 0 }
SavingsAccount.deposit = function(amount)
SavingsAccount.balance = SavingsAccount.balance + amount
end
-- Usage
a = SavingsAccount
a.balance = 100
a.deposit(1000)
现在假设我在 C++ 中有一个名为 Bank 的类:
class Bank {
void AddAccount(Account* a);
};
我在这里想要的是一种在lua中执行以下操作的机制:
SavingsAccount = { balance = 0 }
SavingsAccount.deposit = function(amount)
SavingsAccount.balance = SavingsAccount.balance + amount
end
-- Usage
a = SavingsAccount
bank:AddAccount(a)
如果我需要采取额外的步骤,例如实例化一个 C++ 类以充当代理并将其传递给带有所有 lua 函数等的 lua 表,我可以想象它看起来像这样:
C++ 代码:
// Represents a generic bank account
class ProxyAccount : public Account {
virtual void deposit(double amount);
};
卢阿代码:
SavingsAccount = { balance = 0 }
SavingsAccount.deposit = function(amount)
SavingsAccount.balance = SavingsAccount.balance + amount
end
-- Usage
a = SavingsAccount
a.balance = 100
a.deposit(1000)
proxy = program.ProxyAccount()
proxy.settable(a)
bank:AddAccount(p)
这里的问题是我不知道如何实现 ProxyAccount 类,甚至不知道 settable 的函数签名会是什么样子......