这几天研究C++模板,,在开发的时候有时会实现了如下猫狗鼠类,由于设计原因,这三个没有做成共同一个基类
但是,某天,由于新加上功能,所以要加入一个宠物HousePet的功能,这里可以有扩展成为宠物猫,宠物鼠,宠物狗,宠物具有一定的功能,这里可以选择多重继承,或者组合模式,不过就要把Mouse cat,dog,抽象成一个基类,下边实现的是组合模式的伪代码
不过就要把cat,mouse,dog变成了共同基类.而且如果在say里面加入对cat做特别处理,这里要通过rtti来实现,当这样的独立但是又分散的类比较多时,就很难抽象出一个共同基类,最近研究了一下模板,发现一个叫CTRP的东西几有趣,模仿其思想,改造成了组合模式,不用解析,直接放代码
这样就不用使到dog,cat,mouse有共同基类,又解决写一个housepet就可以实现功能,而且这样还有一个好处,就是可以利用模板的特化,例如我想对housepetcat做特别的say().
假设我想直接在第一个housepet里面做特化cat处理,可以参考modern in C++里面的模板函数特化处理,这里就不详细写,我贴代码给大家参考啦
还有最近有个新的模式叫aop,在c++可以利用模板来实现,正在学习中