首页 > 解决方案 > Swift 中的协议见证表和 vtable 有什么区别?

问题描述

我试图了解 swift 的 vtable 和见证表之间的区别。从理论上讲,它应该是允许动态分派类方法的相同机制。SIL 的文档包含两个段落,表明它们不同。但这对我来说有点混乱。

那么,这两者之间究竟有什么区别呢?

标签: swift

解决方案


根据我的理解,您所说的 vtables 允许动态调度类方法。这些表是在编译时生成的。

另一方面,见证表允许泛型类型的动态分派,因此该表是不同的,因为它需要映射泛型条目以实现相同的结果:动态分派。这些表包含编译器用来“生成运行时调度表”的信息。该信息未在编译时定义。如果您在文档中查看见证表映射基本协议、它所需的方法以及它的关联类型和它的协议一致性(关联类型)。

不确定我是否正确理解了您的问题?


推荐阅读