我为我正在编写的游戏编写了一个文件解析器,以便自己轻松更改游戏的各个方面(例如角色/舞台/碰撞数据)。例如,我可能有一个像这样的字符类:
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(使用前将#替换为@)