C ++ 17中的typeid有反函数吗?

Posted

技术标签:

【中文标题】C ++ 17中的typeid有反函数吗?【英文标题】:Is there an inverse function for typeid in C++17? 【发布时间】:2019-11-17 20:10:15 【问题描述】:

C++17 是否提供了一种从 typeid 获取类型的方法,还是工厂模式仍然是唯一的方法?

【问题讨论】:

你的意思是std::type_infoname()定义的实现吗? 请记住,C++ 是静态类型的,因此如果您想在表达式中使用类型,您必须在编译时知道该类型。你会用这个做什么?如果您提供有关用例的详细信息,则更有可能得到充分的答案。 我有一张地图,我想在其中存储大量模板化对象。我让这些类继承自一个未参数化的基类,这允许我将它们全部存储在同一个映射中。当我检索一个对象时,如何确定它的类型? @RFS 你不应该真的需要,因为基类应该是地图用户直接使用的虚拟接口。如果不是这种情况,那么您可能不应该将继承用于多态性,但是例如std::variant. 如果您确实需要按照您描述的方式进行操作,那么***.com/questions/351845/… 或***.com/questions/307765/… 应该是重复的。 【参考方案1】:

type_info 是运行时值;它的确切内容只能通过运行时执行来确定。 C++ 是一种静态类型语言;在编译时,必须知道 everything 的类型。因此,基于type_info 的具体化(对事物进行描述并将其转化为事物本身的能力)在 C++ 中永远不会发生。

C++ 未来可能会有反射和具体化机制,但它们只会是静态机制,而不是运行时机制。

【讨论】:

以上是关于C ++ 17中的typeid有反函数吗?的主要内容,如果未能解决你的问题,请参考以下文章

EF:使用typeid映射实体框架层次结构

C++ 强制转换和 typeid

我可以将一个类与模板中的另一个类关联(使用 C++17 变体)吗?

C++-typeid-操作符

C++17 函数模板中的静态数组初始化 (MSVC 2019)

C++17 中的显式默认构造函数