c++;如何将字符串(类名)转换为类型

C++; How to turn a string (name of class) into a type?

本文关键字:类名 转换 类型 字符串 c++      更新时间:2023-10-16

函数应该接受类名并返回该类型的对象。如何在c++中做到这一点?

这叫做反射,不是c++语言的一部分。可以使用通常称为工厂模式的东西来实现。它的工作方式是,对于您希望能够创建的每种类型,您可以在可以创建该类型对象的函数和它的名称之间创建映射。

这个映射可以是像std::map这样简单的东西,其中键是类的名称,值是一个函数指针,指向返回类的新实例的函数。

根据您的问题的确切需求,您可能会询问反射(在最一般的情况下),该反射不受语言的本机支持,但您可能会找到一些库,或工厂模式的一种形式,其中您创建一个接收一组参数并返回适当类型的对象的函数。第二种情况是一个更有限的场景,其中类型必须相关,并且您必须实现工厂…

所以问题是,你能扩展你的特殊需求吗?

您将不得不依赖于在您的对象上引入反射的框架,例如Qt元对象系统,或者您自己编写。

然而,这不是真正的反射,只能在您的手动帮助下工作,或者以需要调用工具的形式,或者以您必须将可实例化的类注册到框架的形式。