通过解析纯文本文件生成数据结构

2024-02-12

我为我正在编写的游戏编写了一个文件解析器,以便自己轻松更改游戏的各个方面(例如角色/舞台/碰撞数据)。例如,我可能有一个像这样的字符类:

class Character
{
public:
    int x, y; // Character's location
    Character* teammate;
}

我设置解析器从文件中读取数据结构,其语法类似于 C++

Character Sidekick
{
    X = 12
    Y = 0
}

Character AwesomeDude
{
    X = 10
    Y = 50
    Teammate = Sidekick
}

这将创建两个数据结构并将它们放入映射中<std::string, Character*>,其中键字符串是我给它起的任何名称(在本例中为 Sidekick 和 AwesomeDude)。当我的解析器看到指向类的指针(例如队友指针)时,它会足够智能地在映射中查找以获取指向该数据结构的指针。问题是我无法将 Sidekick 的队友声明为 AwesomeDude,因为它尚未放入角色映射中。

我正在尝试找到解决此问题的最佳方法,以便我可以让我的数据结构引用尚未添加到地图中的对象。我能想到的两个最简单的解决方案是(a)添加转发声明数据结构的能力或(b)让解析器读取文件两次,一次用指向空数据结构的指针填充映射,第二次浏览并填写它们。

(a) 的问题是我还可以决定在类上调用哪个构造函数,如果我向前声明某些内容,我必须让构造函数与其余数据分开,这可能会令人困惑。 (b) 的问题是我可能想在自己的文件中声明 Sidekick 和 AwesomeDude。我必须让我的解析器能够获取要读取的文件列表,而不是一次只能读取一个文件(我想这还不错,尽管有时我可能想获取要从某个文件读取的文件列表)文件)。 (b) 还具有无法使用稍后在构造函数本身中声明的数据结构的缺点,但我认为这没什么大不了的。

哪种方式听起来更好?还有我没有想到的第三种选择吗?似乎应该有一些聪明的解决方案,通过指针引用或绑定或其他东西......:-/我认为这有点主观,基于我想给自己的功能,但欢迎任何输入。


当您第一次遇到参考时,只需将其存储为参考即可。然后,您可以将角色、引用或任何内容放在“稍后需要解决的引用”列表中。

文件完成后,浏览那些有引用的文件并解决它们。

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

通过解析纯文本文件生成数据结构 的相关文章

  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • 为什么Apache MPM prefork.c 使用互斥体来保护accept()?

    我坐下来读书Apache 的 MPM prefork c http code metager de source xref apache httpd server mpm prefork prefork c这段代码使用了一个名为accept
  • 在 C# Winforms 应用程序中嵌入 Windows XP 主题

    我有一个旧版 C Windows 窗体应用程序 其布局是根据 Windows XP 默认主题设计的 由于需要将其作为 Citrix 应用程序进行分发 该应用程序现在看起来像经典主题应用程序 因为 Citrix 不鼓励使用主题系统服务 所以
  • SFINAE 如何使用省略号?

    过去 当使用 SFINAE 选择构造函数重载时 我通常使用以下内容 template
  • 如何将带有自定义分配器的 std::vector 传递给需要带有 std::allocator 的函数?

    我正在使用外部库 pcl 因此我需要一个不会更改现有函数原型的解决方案 我正在使用的一个函数生成一个std vector
  • 如何在 C++ 中将 CString 转换为 double?

    我如何转换CString to a double在 C 中 Unicode 支持也很好 Thanks A CString可以转换为LPCTSTR 这基本上是一个const char const wchar t 在 Unicode 版本中 知
  • 从 Code::Blocks 运行程序时出现空白控制台窗口 [重复]

    这个问题在这里已经有答案了 当我尝试在 Code Blocks 中构建并运行新程序时 控制台窗口弹出空白 我必须单击退出按钮才能停止它 它对我尝试过的任何新项目 包括 Hello world 都执行此操作 奇怪的是 它对于我拥有的任何旧项目
  • 从成员函数指针类型生成函子

    我正在尝试简化 通过make fn 预处理参数的函子的生成 通过wrap 对于 arity 的成员函数n 生成函子基本上可以工作 但到目前为止只能通过显式指定成员函数的参数类型来实现 现在我想从它处理的成员函数类型生成正确的函子 struc
  • 2D morton 码编码/解码 64 位

    如何将给定 x y 的莫顿代码 z 顺序 编码 解码为 32 位无符号整数 生成 64 位莫顿代码 反之亦然 我确实有 xy2d 和 d2xy 但仅适用于 16 位宽的坐标 产生 32 位莫顿数 在网上查了很多 但没有找到 请帮忙 如果您可
  • C++ 插件的“最适合”动态类型匹配

    我有一个几乎所有东西都是插件的架构 该架构以图形用户界面为基础 其中每个插件都由一个 表面 即用户可以通过其与插件交互的 UI 控件 表示 这些表面也是插件 每当添加新插件时 瘦主机都会自动确定哪个可用表面与其最匹配的 UI 如何在 C 中
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • C++11 动态线程池

    最近 我一直在尝试寻找一个用于线程并发任务的库 理想情况下 是一个在线程上调用函数的简单接口 任何时候都有 n 个线程 有些线程比其他线程完成得更快 并且到达的时间不同 首先我尝试了 Rx 它在 C 中非常棒 我还研究了 Blocks 和
  • 使用 mingw32 在 Windows 上构建 glew 时“DllMainCRTStartup@12”的多个定义

    我关注了这个主题 使用 mingw 使建筑物在 Windows 上闪闪发光 https stackoverflow com questions 6005076 building glew on windows with mingw 6005
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • 初始化 LPCTSTR /LPCWSTR [重复]

    这个问题在这里已经有答案了 我很难理解并使其正常工作 基本上归结为我无法成功初始化这种类型的变量 它需要有说的内容7 2E25DC9D 0 USB003 有人可以解释 展示这种类型的正确初始化和类似的值吗 我已查看此站点上的所有帮助 将项目
  • 在 C++17 中使用 成员的链接错误

    我在 Ubuntu 16 04 上使用 gcc 7 2 并且需要使用 C 17 中的新文件系统库 尽管确实有一个名为experimental filesystem的库 但我无法使用它的任何成员 例如 当我尝试编译此文件时 include
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • 为什么文件更新时“如果较新则复制”不复制文件?

    我在 Visual Studio Express 中有一个解决方案 如下所示 The LogicSchemaC 中的类 将在运行时解析指定的 XML 文件 以下是在main的方法Program cs LogicSchema ls new L
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率

随机推荐

  • Notepad++ 在左侧显示打开的文件

    在 Notepad 中 有没有办法在左侧列表中显示当前打开的文件列表 而不是使用默认的选项卡视图 我希望它类似于 TextPad 显示当前打开的文件的方式 我指的不是允许我打开新文件的资源管理器 我只是不喜欢打开许多文件时顶部的选项卡 设置
  • 带有错误句柄的自定义验证 Ninja 表单

    我在 WordPress 安装中使用 Ninja Form 插件 我的表单有 3 个输入文本字段 在按下提交按钮后 我需要通过检查输入的值是否存在于我的数据库中的自定义表中来验证此输入之一 如果该值尚不存在 则不会发生任何情况 Ninja
  • Python argparse 条件要求

    如何设置 argparse 如下 if 2 is on the command line no other arguments are required if 2 is not on the command line 3 and 4 arg
  • Java 电子邮件监听器

    我遇到了 IdleManager 类和 watch 方法 它使 imap 文件夹保持打开状态 并且理论上正在监视新消息 但如何让它在新电子邮件到达时输出或通知 代码 public static void main String args t
  • 报表查看器.rdlc 如何传递参数?

    显然 我一直在 C Windows 表单中制作试算表报告 报告查看器 其中显示 帐户 的年度报告及其每个帐户中的应付总额 该报告具有假定的年度复利值 具体取决于用户的选择 ex Jan 1 2013 to Feb 1 2014 将会有一个复
  • IDEA 以及如何禁用 gradle 包装器生成?

    我是 IJ IDEA 和 Gradle KTS 的新手 我手动创建了 kts 并将其导入到 IJ 中 IDEA 已经生成了 gradle 包装器 但我不想要这个 如果我删除 gradle 包装器和关联的目录 IDEA 会提示我从 gradl
  • 有没有办法用 FireMonkey 添加提示或工具提示?

    我已经搜索过但找不到任何东西 有没有办法用 FireMonkey 添加提示或工具提示 是否有可用的组件可以实现此目的 理想情况下 我正在寻找这样的东西 标注类型工具提示 对于搁置此问题的版主 我正在寻找有关如何实现此目标的源代码行 而不是购
  • jQuery 验证插件:如何强制验证以前有效的字段?

    我正在使用 jQuery 验证插件来验证表单 您知道如何强制重新验证吗以前成功过 fields 我已使用以下检查尝试了 form 函数 这是在用户单击 提交 后执行的 if form1 validate form false formVal
  • 如何将 SVG 对象插入到带有链接的 HTML 中?

    我不想添加到 svg 的链接 这是不可能的 因为 svg 不是我提供的 但想添加一个链接 例如 a href img src foo svg a 只是这一次不是img but a object 这样我就可以包含一个 svg 它适用于某些浏览
  • 如何让Jqgrid冻结列自动换行

    我正在使用最新的 jqgrid 包 4 4 5 我想让标题栏自动换行 我读了奥列格answer https stackoverflow com questions 8686616 how can i get jqgrid frozen co
  • Python BeautifulSoup:通配符属性/id搜索

    我有这个 dates soup findAll div id date 但是 我需要 id 作为通配符搜索 因为id can be date 1 date 2 etc 您可以提供可调用作为过滤器 dates soup findAll div
  • 如何访问 rowdatabound 上的 gridview 列?

    我想在值为 1 时将 gridview 列的值更改为活动状态 我有类似的 gridview 列
  • 为什么在类中实现的 C# 接口方法必须是公共的?

    我有一个继承接口的类 接口成员方法在我的类中实现 没有访问修饰符 因此 默认情况下它是 private 我收到错误 无法实现接口成员 因为它不是公共的 为什么不允许 我不能覆盖可访问性吗 这是一个例子why能够覆盖可见性是没有意义的 int
  • 在调整大小时保存 NSWindow 大小并为用户关闭

    我注意到 OS X 上的所有应用程序似乎都会保存您设置的大小 下次打开它时 它通常处于相同的位置和大小 我正在制作一个应用程序 我注意到调整大小后 如果我再次启动应用程序 它的大小只是我在 Xcode 4 的 IB 中设置的大小 而不是我在
  • 检查是否连接了打印机

    Windows 中有没有一种方法 在 Windows CE 中工作 来检查打印机是否已连接并与 C 中的 LPT1 进行通信 Edit 更多信息 我们目前正在使用通用 Windows CE 打印机驱动程序 pcl dll 通过将其传递到Cr
  • 将 Perfmon 分析解释为特定于应用程序的观察/数据的最佳方法是什么?

    我们很多人都使用过Perfmon工具来进行性能分析 特别是对于 Net 计数器 但 Perfmon 中存在太多变量 因此总是很难将 Perfmon 结果解释为有关我的应用程序的有价值的反馈 我想使用 perfmon 不是像蚂蚁分析器 htt
  • 如果我们是有效用户,我们可以克隆存储库吗?

    我是 Git 新手 所以如果这是一个愚蠢的问题 请原谅 在我们的组织中 我们使用 Git 作为存储库 我可以这样做git checkin checkout pull 从我的办公室机器 我们的 Git 存储库 URL 是这样的 但由于限制我无
  • 如何使 Flex Row 响应式 Bootstrap 4

    目前页面如下所示 现在 调整大小到移动屏幕时 弹性框会溢出容器 Html div class d flex flex row text white text center div class port item p 4 bg primary
  • 如何修改 C 程序以便 gprof 可以分析它?

    当我在我的 C 程序上运行 gprof 时 它说我的程序没有累积时间 并且所有函数调用都显示 0 时间 但是它确实对函数调用进行计数 如何修改我的程序 以便 gprof 能够计算某项运行所需的时间 编译的时候有没有指定 pg http so
  • 通过解析纯文本文件生成数据结构

    我为我正在编写的游戏编写了一个文件解析器 以便自己轻松更改游戏的各个方面 例如角色 舞台 碰撞数据 例如 我可能有一个像这样的字符类 class Character public int x y Character s location C