字符串到类对象实例化:C 中的探索
在 C 中,问题出现了:我们可以从包含其对象的字符串生成对象吗?类名,避免需要详尽了解派生类和 if-else 块?与具有反射功能的 C# 不同,C 缺乏对此的内置机制。但是,有一些解决方法可以让我们实现此功能。
一种方法涉及使用映射进行类型映射。我们创建一个模板函数createInstance来生成对象,以及一个将类名映射到其相应函数指针的map_type映射。这使我们能够通过简单地使用类名字符串访问映射来获取新实例。
另一个解决方案是使类能够在运行时注册自己。我们在 BaseFactory 中有一个静态方法 getMap,它返回一个 map_type 指针,该指针在第一次调用时创建,并且永远不会被删除。类可以使用 DerivedRegister 结构来注册自己,并将其类名作为参数传递。这种方法确保新类自动包含在映射过程中。
对于没有共享基类的不相关类型,我们可以使用 boost::variant 来容纳它们的返回值。 boost::variant 的作用就像一个联合体,携带有关其内部类型的信息。通过利用这个概念,我们可以将类名映射到返回 boost::variant 对象的函数指针,该对象可以保存所需的类型实例。
在 C 中,我们可以选择使用 Boost.Function 来解耦我们的来自特定函数或类型的代码。然后,映射结构将使用将类名映射到 Boost.Function 实例的映射,可以调用该实例来创建对象。
这些方法提供了从 C 中类名的字符串表示形式动态生成对象的方法。虽然它们需要一些手动配置,但它们提供了灵活性并避免了工厂类中详尽的分支逻辑的需要。
以上是如何从包含类名的字符串实例化 C 对象?的详细内容。更多信息请关注PHP中文网其他相关文章!