本次谈逻辑分派。 三种最基本的逻辑关系为相似、承接和因果关系。 逻辑分派主要指的是因果关系,因果关系里面又包含条件关系。因果关系是一种非常特殊且重要的关系,表示两个功能块之间具备极强的依赖性。功能 B 只有依赖于功能 A 才能存在,彼此不能分开。 像简单功能模块使用的 if-else,constexpr if, Parametric Polymorphism 当中使用的 Partial Specialization/Tag dispatching/SFINAE/Concepts,Ad hoc Polymorphism 当中使用的 overload resolution,还有 Subtyping Polymorphism 当中使用的 virtual function,都属于逻辑分派。 结构从本质上来说,是一种逻辑。程序结构本质是程序的逻辑体现,混乱的逻辑代表混乱的结构,清晰的逻辑代表清晰的结构,结构越简洁、越清晰,程序越具有稳定性,扩展维护起来也比较轻松。 早期的这些逻辑分派,大多依赖于 type,反而是最朴素的 if-else 依赖于 value。依赖 type 往往需要定义很多的类型,甚至很简单的功能也要定义一个类,随着代码模块增多,类会越来越多,这叫类膨胀问题。而依赖于 value 是一种更偏向于 Ad hoc Polymorphism 的方式,Functional Programming 就属于此类,此时功能的最小单元通常使用函数。 Dispatch table 就属于一种轻量级的逻辑分派方式。 一个简单的示例: int main(){ std::map<const char… Continue Reading T230713 Dispatch table