C++ 我为什么要使用RTTI?

C++ 我为什么要使用RTTI?,c++,rtti,C++,Rtti,我听说很多RTTI可以通过使用好的虚拟函数来避免…既然RTTI笨重又慢,我为什么要使用它呢?是否有任何情况下我应该使用RTTI而不是虚拟访问器函数?RTTI可以用于解决双重分派问题(一种基于两个对象的动态类型的虚拟行为的函数) RTTI使您能够使用虚拟方法自动访问类型的类继承图 与其他一些语言功能一样,如果您只想要其功能的一个受限子集(如果您对集中列表、单个实现继承、甚至单个二进制、或在执行早期/晚期缺乏可用性等都满意),那么您有时可以实现一个更高效、受限的版本 此外,通常双调度可以重构为正交单

我听说很多RTTI可以通过使用好的虚拟函数来避免…既然RTTI笨重又慢,我为什么要使用它呢?是否有任何情况下我应该使用RTTI而不是虚拟访问器函数?

RTTI可以用于解决双重分派问题(一种基于两个对象的动态类型的虚拟行为的函数)

RTTI使您能够使用虚拟方法自动访问类型的类继承图

与其他一些语言功能一样,如果您只想要其功能的一个受限子集(如果您对集中列表、单个实现继承、甚至单个二进制、或在执行早期/晚期缺乏可用性等都满意),那么您有时可以实现一个更高效、受限的版本

此外,通常双调度可以重构为正交单调度。而且,即使RTTI允许多个分派,代码仍然混乱且难以维护,RTTI的成本也不小(请注意,编译器现在在这方面做得更好)。因此,通常情况下,一个更简单、似乎效率更低的单一分派解决方案最终会成为一个更好的主意

当您需要动态分派时,RTTI也可以用于Deservation,但无论出于何种原因,都无法添加新的
virtual
方法


暴露纯接口但需要彼此协作的紧密耦合类guts在对盲目的
静态\u cast
的危险心存疑虑时也可以使用RTTI。

RTTI可以用来解决双重分派问题(一种实际上基于两个对象的动态类型的功能)

RTTI使您能够使用虚拟方法自动访问类型的类继承图

与其他一些语言功能一样,如果您只想要其功能的一个受限子集(如果您对集中列表、单个实现继承、甚至单个二进制、或在执行早期/晚期缺乏可用性等都满意),那么您有时可以实现一个更高效、受限的版本

此外,通常双调度可以重构为正交单调度。而且,即使RTTI允许多个分派,代码仍然混乱且难以维护,RTTI的成本也不小(请注意,编译器现在在这方面做得更好)。因此,通常情况下,一个更简单、似乎效率更低的单一分派解决方案最终会成为一个更好的主意

当您需要动态分派时,RTTI也可以用于Deservation,但无论出于何种原因,都无法添加新的
virtual
方法


公开纯接口但需要彼此协作的紧密耦合类在对盲播的危险心存疑虑时,guts可以使用RTTI。

您发现RTTI到底有多慢?您发现RTTI到底有多慢?谢谢!但是为什么我被否决了?@Alexaaaa你读过“如何提问”资源网站吗?将您的问题与得分为5+的问题进行比较?谢谢!但是为什么我被否决了?@Alexaaaa你读过“如何提问”资源网站吗?将您的问题与得分为5+的问题进行比较?