派发机制


分派/派发

dispatch

变量被声明时的类型叫做变量的静态类型(Static Type)。

变量所引用的对象的真实类型又叫做变量的实际类型(Actual Type)。

根据对象的类型而对方法进行的选择,就是分派(Dispatch)。


分派时期

根据分派生的时期,可以将分派分为两种,静态分派和动态分派。

静态分派

Static Dispatch

静态分派发生在编译时期,分派根据静态类型信息选择合适的方法。称为编译时多态。

可以用来实现类型安全、运行高效的同质对象集合操作。

函数重载、基于模板的实现。

动态分派

Dynamic Dispatch

动态分派发生在运行时期,动态分派动态地置换掉某个方法。

称为运行时多态、动态多态(dynamic polymorphism)。

通过类继承机制和虚函数机制生效于运行期。可以优雅地处理异质对象集合,只要其共同的基类定义了虚函数的接口。也被称为子类型多态(Subtype polymorphism)。


分派类型

选择方法时,需要考虑方法的接收者类型和方法的参数类型

根据分派的类型,可以将分派分为两种,单分派和多分派。

单分派

single dispatch

面对对象语言的分派只基于第一参数,经常有特殊的参数语法,并且有时是暗含而非显式写成一个参数。

通常是调用对象的实际类型。

C++就是通过this指针的实际类型来选择合适的方法。

参考这个进一步理解:https://blog.csdn.net/wx_14678/article/details/106441590

多分派

multiple dispatch、multimethod、MD

使用方法的所有参数,而非只用第一个,来决定调用哪个方法。

Julia自带多重分派机制。多重分派和类型系统是julia的基础核心。


Open Multi-Methods for C++

https://www.stroustrup.com/multimethods.pdf


C++单分派和双分派问题

https://blog.csdn.net/wx_14678/article/details/106441590