【问题标题】:C++; How to turn a string (name of class) into a type?C++;如何将字符串(类名)转换为类型?
【发布时间】:2011-08-23 10:23:51
【问题描述】:

函数应该采用类的名称并返回该类型的对象。如何在 C++ 中做到这一点?

【问题讨论】:

    标签: c++ class types factory


    【解决方案1】:

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

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

    【讨论】:

    • 我认为一般术语是自省。
    • @Preet:顾名思义,intro_spection_ 来自拉丁语,只是关于观察的反射部分。
    【解决方案2】:

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

    所以问题是,您可以扩展您的特定要求吗?

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-08
        • 2020-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多