再论双分派

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

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多的时候成为问题,但是,其一,你有选择的自由,其二,这至少使得问题可以得到解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值