再论双分派

原创 2007年09月20日 19:20:00

暴力双分派速度快,可是当类增多时,代价依然很大。

map双分派在速度优化上有dynamic_cast和static_cast两种选择,Loki把这个选择做成了Policy。

矩阵双分派速度上有天然的优势,但是你要修改你的类。于是Loki也把这个做成了Policy供你选择。

矩阵双分派的思想是,在你的class里保存分配器使用的一个id值,分配器可以随时获取或者设置它。分派器操作此值构造矩阵,这样双分派变成了二维平面上的Point找寻,而且这个点的x、y标你都知道,这是可以的最快的分派查询方式了。

map双分派使用了局部类的思想可以和仿函数有机结合在一起。你可以保存函数的状态。

再论双分派,我想说点于双分派外得到的东西。

暴力双分派给我们的启示是template给我们了一个驱动编译器的工具,你可以使用if-else和递归让编译器帮你生成代码。

map双分派告诉我们对局部类的使用方式,它还给我们一次使用C++编译器开发者常用但我们不常用的技术(局部类)的机会,了解这些对你使用C++有很大的帮助。

矩阵双分派的思想不难想到,技术也常用,但是它的难度在于第一个想到这么做的人如何思考的。

三种双分派策略组合到库里的时候,Loki又向你展示了Policy的作用和效果。

关于Policy,我觉得它给我的其实很多。一直以来,我都讨厌被写成很大的类,它不便阅读,自然维护性非常差,而且我总认为这样做是在借助C++的封装做C的事情,C中遇到的问题你都会遇到,因为你的类足够大了。

但是,有事拆分一个类同样很难,至少很多时候我不知道如何做决定,在类庞大了,维护不方便的时候才想起来其实以前该拆分的,但这个时候已经很晚了。Policy给了我一个提示。你可以组装,运用模板或者继承,对原件的维护就是对一个小类的维护,这样会好很多。是的,看懂、维护组装关系一样会在Policy多的时候成为问题,但是,其一,你有选择的自由,其二,这至少使得问题可以得到解决。

c++只支持单分派(single dispatch)

c++不支持双分派(double dispatch)和多分派(multi-dispatch),只支持单分派(single dispatch)。一个典型的不支持双分派的例子如下所示:#include u...
  • kisserLeon
  • kisserLeon
  • 2007-01-09 18:30:00
  • 708

面向对象语言的多分派、单分派、双重分派

变量被声明时的引用类型是变量的静态类型,真实类型是变量的实际类型。根据变量的类型进行方法的选择就是分派。在编译阶段产生静态分派,根据静态类型发生,比如方法重载,发生在运行阶段的是动态分派,动态置换调用...
  • ckao7470
  • ckao7470
  • 2014-02-10 17:05:40
  • 1783

实现C++双分派

/******************************************************************** author : Clark/陈泽丹 create...
  • xiaodan007
  • xiaodan007
  • 2014-04-23 05:07:00
  • 932

双分派模式

在《GoF 23种设计模式模式解析附C++实现源码》和《设计模式解析之—Visitor模式》中,我给出了Visitor模式的诠释和示例实现源码。  个人觉得例子和解析还是能够比较清晰地为学习和掌握V...
  • mydriverc2
  • mydriverc2
  • 2013-09-26 10:55:50
  • 527

Double Dispatch(双分派)(c++ 版)

参考文献地址: http://gurudk.iteye.com/blog/322753 分派过程就是确定一个方法调用的过程,双分派就是根据运行时多个对象的类型确定方法调用的过程。 想象这样一个客户...
  • wzsy
  • wzsy
  • 2016-08-19 10:41:55
  • 227

暴力双分派再论TList

TypeList是Loki从外星引进的强大引擎, TypeList由模板支持构建,但是被构建出来的TypeList给了模板神奇的能力,Loki给予新知,源于模板,Loki给予震撼,源于TypeList...
  • win2ks
  • win2ks
  • 2007-09-20 13:30:00
  • 604

5.1Java模拟 双分派(Double Dispatch)

应用命令模式,在Java中模拟双分派。
  • yqj2065
  • yqj2065
  • 2014-08-31 14:41:09
  • 2671

访问者模式与双分派

Java中模拟双分派  作为命令模式的应用,得到了一个有用的结构。从该结构出发唾手可得访问者模式。 再次说明,yqj2065不关心访问者模式的“对象结构”。 双分派中的结构,如图所示。 如果一个...
  • yqj2065
  • yqj2065
  • 2015-09-25 16:35:13
  • 796

运行阶段双分派

如果你想在运行阶段分派,你将避免暴力手段,因为简单的dynamic_cast底层一样消耗我们的效率。pair是个不错的东西,它可以把两个东西当成一个用。pair两个类型作为索引可以获得双分派的目标函数...
  • win2ks
  • win2ks
  • 2007-09-20 18:44:00
  • 587

关于双分派(Double Dispatch)的一点探讨

提纲背景我不认识你,就让你来处理增加一个识别函数,避免无限循环真正的增量式开发非对称性处理上升到设计模式层次结论 背景 Scott Meyers在More Effective C++ 的第31个条款中...
  • victor_8509
  • victor_8509
  • 2006-05-05 10:11:00
  • 1802
收藏助手
不良信息举报
您举报文章:再论双分派
举报原因:
原因补充:

(最多只允许输入30个字)