我花了一整天的时间研究这个话题,所以我带着这个话题来找你的只是一些零散的知识。请允许我描述一下我正在尝试完成的工作,也许您可以提出解决当前问题的方法,或者另一种完全解决问题的方法。
我试图模仿与XAML文件在WPF中的工作方式相关的内容,您实际上是在从 XML 定义中实例化对象树。如果这不正确,请告知。这个问题与WPF、C#或任何托管的东西无关- 我只提到它是因为它是一个类似的概念。
因此,我已经创建了一个XML解析器类,并基于ObjectNode对象生成了一个节点树。ObjectNode对象拥有一个名为type的字符串值,并且它们有一个std::vector子ObjectNode对象。
下一步是根据ObjectNode树中的数据实例化对象树。需要此中间ObjectNode树,因为同一ObjectNode树可能会被实例化多次或根据需要延迟。正在创建的对象树使得树中的节点是公共基类的后代,现在我们可以将其称为MyBase。叶节点可以是任何类型,不一定从MyBase派生。
为了使这更具挑战性,我不知道树中可能涉及哪些类型的对象,因此我需要允许向工厂注册新类型。
我知道boost的工厂。他们的文档在此页面上有一个有趣的小设计段落:
o 我们可能想要一个工厂,它接受一些转发给构造函数的参数,
o 我们可能想要使用智能指针,
o 我们可能想要几个成员函数来创建不同类型的对象,
o 我们可能不一定需要多态基对象的类,
o 正如我们将看到的,我们根本不需要工厂基类,
o 我们可能只想调用构造函数 - 没有 #new# 在堆栈上创建对象,
最后我们可能想要使用自定义的内存管理。
我可能没有正确理解这一切,但这似乎表明我正在尝试做的事情可以通过 boost 的工厂来完成。但是我找到的所有示例似乎都描述了所有对象都派生自基本类型的工厂。
对此的任何指导将不胜感激。
谢谢你的时间!