gpt4 book ai didi

c++ - 使用 SWIG 包装一个 Lua 对象以便在 C++ 中使用

转载 作者:搜寻专家 更新时间:2023-10-31 00:23:33 25 4
gpt4 key购买 nike

目前我知道如何使用 SWIG 绑定(bind)在 Lua 中实例化和传递 C++ 对象,我需要的是相反的过程。

我正在使用 Lua & C++ & SWIG。

我在 C++ 中有接口(interface),在 lua 中有对象,它们实现了执行相同工作并具有相同结构的方法。我希望能够在 lua 中实例化这些对象,然后使用指向它们相似的接口(interface)的指针在 C++ 中传递它们。

因此,我可以想象创建一个接口(interface)的 C++ 实现,它将作为所述 lua 对象的处理程序,但我不知道如何执行此操作。该类将充当 C++ 世界中的 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++ 中有一个名为 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);
};

Lua代码:

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 的函数签名会是什么样子...

最佳答案

我不熟悉 SWIG(我知道它是什么但从未使用过它)所以这可能不是您正在寻找的答案。

我一直在从事 C++ 项目,并使用 luabind 取得了成功.它允许您 subclass C++ objects with Lua objects .您可能想尝试一下,看看它是否适合您。

关于c++ - 使用 SWIG 包装一个 Lua 对象以便在 C++ 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1792678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com