sha*_*oth 14 c++ polymorphism virtual member-functions
可能重复:
关于C++中虚拟机制的问题
使用vtable是在C++中实现虚拟成员函数机制的唯一方法吗?还有其他什么方式?
Cub*_*bbi 11
从技术上讲,动态调度所需的全部是能够识别对象的动态类型,并给出指向它的指针.因此,任何类型的隐藏(或不那么隐藏)的typeid字段都可以工作.
动态调度将使用该typeid来查找关联的函数.该关联可以是hastable或数组,其中typeid是索引,或任何其他合适的关系.vptr恰好是以最少的步骤实现这一目标的方法.
另一种已知的机制是类型分派函数。实际上,您可以用 typeid(小枚举)替换 vtable 指针。(动态)链接器收集给定虚拟函数的所有重写,并将它们包装在 typeid 字段上的一个大 switch 语句中。
理论上的理由是,这用大量可预测的跳跃取代了间接跳跃(不可预测的)。通过在选择枚举值方面的一些智慧,switch 语句也可以相当有效(即比 lineair 更好)