目前我知道如何使用 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 的函数签名是什么样的......