使用 SWIG 包装 Lua 对象以在 C++ 中使用

2024-01-10

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


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

我一直在从事 C++ 项目并成功使用luabind http://www.rasterbar.com/products/luabind.html。它可以让你使用 Lua 对象子类化 C++ 对象 http://www.rasterbar.com/products/luabind/docs.html#deriving-in-lua。您可能想尝试一下,看看它是否适合您。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SWIG 包装 Lua 对象以在 C++ 中使用 的相关文章

  • 实体框架 - sql server 表中未设置默认值

    SQL Server 2005 数据库表有一列 createdon 其默认值设置为 getdate 我正在尝试使用实体框架添加记录 createdon 列未更新 我是否错过了实体框架中的任何属性 请提出建议 这是实体框架存在的少数问题之一
  • 你好世界,裸机 Beagleboard

    我正在尝试在我的 Beagleboard xm rev 上运行 hello world 类型的程序 C 通过调用 Cputs功能来自装配 到目前为止 我一直使用这个作为参考 http wiki osdev org ARM Beagleboa
  • 递归显式模板实例化以导出库的符号

    在我之前的问题中我问过递归显式模板实例化是否可能 https stackoverflow com questions 7395113 is recursive explicit template instantiation possible
  • C++ 编译器可以对结构中的元素重新排序吗

    C 编译器 特别是 g 可以对结构体的内部元素重新排序吗 我看到一些奇怪的行为 其中我有一个包含如下内容的结构 Struct SomeStruct long someLong long someLongArray 25 unsigned l
  • iPhone 编程游戏

    使用 Objective C 还是 C 为 iPhone 编写游戏最好 像 Flight Control 这样的游戏会用什么语言编写 图形应采用什么格式才能在 iPhone 上正确显示并快速加载 像 Flight Control 这样的游戏
  • 轮廓积分算法 C++

    我正在尝试编写一个应用数学程序来计算复平面中的轮廓积分 对于初学者来说 我想为梯形方法编写一个算法 但我有点坚持理解它会是什么样子 毕竟 我们通常将梯形方法视为 2D 图 而这里我们有 f C gt C 所以我们谈论的是 4D 最终我希望用
  • 使用 boost::asio 是否有一种可移植的方法来查找空闲端口号

    我目前正在尝试找出一种方法来查找空闲端口号以建立连接 最好使用 boost asio 然后 该端口号将用于侦听 只有这样我才能打开套接字 大致来说 有没有办法做到 tcp resolver query query localhost por
  • 可以轻易移动,但不可轻易复制

    是否可以创建类类型 即 普通移动构造 但不是普通复制构造 但仍然可复制构造 普通复制构造 但不是普通移动构造 但仍然可移动构造 可以简单地复制分配 但不能简单地移动分配 但仍然可以移动分配 可以简单地移动分配 但不能简单地复制分配 但仍然可
  • WPF 中可选择的 TextBlock 或带有格式化文本的 TextBox

    我遇到一种情况 我需要显示格式化文本 正常 粗体 突出显示 并且还应该是可选择的 以便用户可以复制文本 我使用了文本块 我可以使用内联内容流元素应用多种格式 但不幸的是它的文本不可选择 虽然文本框允许选择文本并复制到剪贴板 但它不允许我设置
  • 从动态服务器中抓取 html 列表数据

    哈喽大家好 抱歉提出转储问题 这是我最后的手段 我发誓我尝试了无数其他 Stackoverflow 问题 不同的框架等 但这些似乎没有帮助 我有以下问题 一个网站显示一个数据列表 前面有大量的 div li span 等标签 它是一个很大的
  • 在 C# 中给定周数和年份,计算一周的开始和结束日期(基于 ISO 规范)

    我需要生成一份报告 显示一年中的 52 周 或某些年份的 53 周 及其开始日期和结束日期 有一个 ISO 规范可以做到这一点 但看起来非常复杂 我希望有人知道在 C 或 Visual Basic 中执行此操作的方法 实际上适用于 Visu
  • 需要帮助将 winform 迁移到 net 5

    我正在将 winform 应用程序从 net core 3 1 移植到 net 5 并收到以下错误 严重性代码 说明 项目文件行抑制状态 错误NETSDK1136 目标平台必须设置为Windows 通常 通过在 TargetFramewor
  • 给出对象的指针作为参数

    假设我有 void func foo obj 我有 foo object 我该如何制作object进入争论func 只需取消引用它即可 func object
  • Parallel ForEach 的本地初始化如何工作?

    我不确定 Parallel ForEach 中本地 init 函数的使用 如 msdn 文章中所述 http msdn microsoft com en us library dd997393 aspx http msdn microsof
  • 对嵌套属性使用 XmlAttributeOverrides

    我试图使用 XmlAttributeOverrides 来控制类序列化后哪些类属性出现在 xml 中 它适用于 根 类上的属性 但不适用于嵌套属性 这是一个简单的例子来说明我想要完成的任务 我的类层次结构如下 public class Ma
  • 允许使用 AutoMapper 或类似工具映射动态类型吗?

    我已经开始使用https github com robconery massive https github com robconery massive对于一个项目 我想知道是否有任何映射工具可以支持动态到静态类型的映射 我以前使用过 Au
  • System.IndexOutOfRangeException:索引超出了数组的范围[重复]

    这个问题在这里已经有答案了 我正在开发一个 ATM 软件作为家庭作业 我想知道今天处理的交易总量 为此我编写了以下代码 public decimal getDayTransaction int accountid string date s
  • 实例着色器矩阵的设置

    我想绘制实例立方体 我可以打电话GL DrawArraysInstanced PrimitiveType Triangles 0 36 2 成功地 我的问题是所有立方体都绘制在相同的位置和相同的旋转 我如何为每个立方体单独更改它 要创建不同
  • { Qt5.0.2/QML/QtQuick2.0/C++ } 运行没有错误的示例项目? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的设置是Qt5 0 2 MinGW 32位 我在寻找 Qt5 0 2 QML QtQuick2 0 C 代码项目示例 不是Qt Qu
  • 为 winforms ComboBox 中的单个项目着色?

    我遇到了一个困境 我有一个表单 其中包含许多组合框 其中包含在某些情况下可能无效 过时的信息 选项 项目 我不能简单地从项目中删除过时的信息 但我确实想在选项无效时为用户提供视觉线索 我正在考虑对项目进行着色 可能是红色 来指示它们是否无效

随机推荐

  • PHP html_entity_decode 未按预期解码实体?

    在下面的代码中 string1 function doesn apos t work as expected string2 html entity decode string1 string2 仍然包含 apos 调用 html enti
  • AngularJS Batarang - 什么是拦截表达式?

    我目前正在使用 AngularJS 1 3 0 稳定版本和 Batarang Chrome 扩展 在监视树中 我注意到在我的许多范围下都有一个称为 interceptedExpression 的东西 那是什么或者什么场景创建了拦截表达式 W
  • MySQL Workbench - 架构与数据库相同吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试为 php 代码设置数据库
  • Powershell 脚本不通过计划任务运行

    我的域控制器上有一个小脚本 设置为通过 SMTP 向我发送有关最新安全事件 4740 的电子邮件 该脚本在手动执行时将按预期运行 但是 当设置为通过计划任务运行时 尽管它显示已执行 但什么也没有发生 没有电子邮件 脚本如下 If NOT S
  • 全局变量的 JavaScript 提升

    我想知道 javascript 提升如何用于全局变量 假设我有以下代码片段 var a 5 function print console warn a a b var a 10 b 5 console warn a a print 在这种情
  • 如何获取数组中的唯一值[重复]

    这个问题在这里已经有答案了 如何获取数组中唯一值的列表 我是否总是必须使用第二个数组 或者 JavaScript 中是否有类似于 java 的 hashmap 的东西 我将要使用JavaScript and jQuery仅有的 不能使用额外
  • 在 Haxe 中使用对象作为 Map 键

    我正在尝试做一个Map以一个对象作为键 问题是 当我尝试从这张地图中获取元素时 我总是得到null 这是因为我没有提供与密钥完全相同的参考 我正在提供一个具有相同的对象values 所以参考不同 有什么办法可以解决吗 我可以让它使用某种eq
  • wget:检查文件时间戳并覆盖[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我怎样才能得到wget去做这个 从某个位置下载文件x 仅当文件的本地副本的时间戳早于该文件的时间戳时x 这意味着 仅当存在文件的较新版本时 它才应从给
  • 从 16 位硬件寄存器读取

    在嵌入式系统上 我们有一个设置 允许我们通过命令行界面读取任意数据以用于诊断目的 对于大多数数据 这工作得很好 我们使用memcpy 将数据复制到请求的地址并通过串行连接将其发送回 然而 对于 16 位硬件寄存器 memcpy 导致一些问题
  • Linkedin iOS SDK:当个人资料照片为空时,授权屏幕上的样式错误

    我们使用 LinkedIn sdk 授权 iOS 移动应用程序访问用户的 LinkedIn 个人资料 应用程序是使用 Xamarin 制作的 本机 LinkedIn sdk 已绑定 因此它应该以相同的方式工作 如果LinkedIn头像为空
  • 使用正则表达式拆分驼峰式字符串

    我有一个像这样的驼峰式字符串s ThisIsASampleString 我想使用大写字母作为分隔点分成一个数组 我期待这个 This Is A Sample String 这是我到目前为止所做的 s ThisIsASampleString
  • ASP.NET Web API 中的用户身份验证

    我需要开发一个 iPhone 客户端来使用来自某处的 JSON 数据 我选择了 MS 的 Web API 因为它看起来很简单 但在验证用户身份时 事情变得非常令人沮丧 我很惊讶我无法找到一个清晰的示例来说明如何从登录屏幕到使用Authori
  • 从应用程序内部重新安装 iPhone 应用程序

    我想找到一种方法 是否可以从里面重新安装 iPhone 应用程序 假设我的用户已经在手机中安装了该应用程序 现在发布了新版本 我可以制作我的应用程序 以便它可以通过互联网检查新版本是否可用 如果有 则下载它并要求用户安装它 如果用户同意 它
  • 如何让精灵坐在移动的精灵上

    如何让精灵坐在移动的精灵上并与其一起旅行 我已经让红色盒子随着冲动而跳跃 当它落到正在移动的黑色块上时 红色盒子会保持原状 掉落时会滑动移动物体 就像没有摩擦力一样 在重力 摩擦力均为 1 0 的情况下 两者甚至尝试增加质量 但没有任何效果
  • 如何为 TypeScript 文件创建模板?

    我有以下内容 function Opens a new modal window param object options an object with any of the following options return object
  • 类型错误:“字节”类型的对象不可 JSON 序列化

    我刚刚开始Python 编程 我想用scrapy创建一个机器人 它显示 类型错误 当我运行项目时 字节 类型的对象不可 JSON 序列化 import json import codecs class W3SchoolPipeline ob
  • Spring Data MongoDB - 保存 LocalDate/LocalDateTime 时,该值被设置为昨天

    我在将 Java8 Date API 值保存到 MongoDB 数据库时遇到问题 每当保存新的 LocalDate 实例 LocalDate now 时 我们都会获得昨天日期 时间设置为下午 23 00 的值 例子 dt getDate t
  • Magento 2 - 将产品添加到购物车时直接进入结账页面

    我正在编写一个扩展 当单击产品页面上的 添加到购物车 按钮时 可以直接进入结账页面 我找到了 Magento 1 的解决方案here http www magecorner com bypass cart and go to checkou
  • mysql_query 中的更新有时返回 null

    我使用此代码来更新记录mysql这是我的代码 always successfully打印出来 但是当服务器拥挤时 会打印出 失败 字符串 而 结果 变量没有任何值 该查询始终正常工作 但有时会返回NULL 我怎样才能解决这个问题 有一个问题
  • 使用 SWIG 包装 Lua 对象以在 C++ 中使用

    目前我知道如何使用 SWIG 绑定在 Lua 中实例化和传递 C 对象 我需要的是相反的 我正在使用 Lua C SWIG 我有 C 中的接口和 lua 中的对象 它们实现的方法执行相同的工作并具有相同的结构 我希望能够在 lua 中实例化