【发布时间】:2011-08-23 10:23:51
【问题描述】:
函数应该采用类的名称并返回该类型的对象。如何在 C++ 中做到这一点?
【问题讨论】:
函数应该采用类的名称并返回该类型的对象。如何在 C++ 中做到这一点?
【问题讨论】:
这称为反射,不是 C++ 语言的一部分。可以使用通常称为工厂模式的东西来实现。它的工作方式是,对于您希望能够创建的每种类型,您都可以在可以创建该类型对象的函数与其名称之间创建一个映射。
这种映射可以像std::map 这样简单,其中键是类的名称,值是指向返回类的新实例的函数的函数指针。
【讨论】:
根据您的问题的确切要求,您可能会询问语言本身不支持的 reflection(在最一般的情况下),但您可能会找到一些库,或者工厂模式的一种形式,您可以在其中创建一个函数,该函数接收一组参数并返回适当类型的对象。第二种情况是一个更有限的场景,其中类型必须相关,并且您必须实现工厂......
所以问题是,您可以扩展您的特定要求吗?
【讨论】:
您将不得不依赖在您的对象上引入反射的框架,例如 Qt 元对象系统,或者自己编写。
但是,这不是真正的反射,只能在您的手动帮助下工作,无论是以需要调用工具的形式,还是以您必须将可实例化类注册到框架的形式。
【讨论】: