关闭

再论双分派

标签: 编译器c++class优化工具c
833人阅读 评论(0) 收藏 举报
分类:

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

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:181464次
    • 积分:2939
    • 等级:
    • 排名:第12671名
    • 原创:113篇
    • 转载:3篇
    • 译文:0篇
    • 评论:28条
    文章分类