说实话,对template没有太多的研究,包括c++和java的template编程范式。java的template和c++相比,简直就不值得一提,语言基础不同,机制也不同。
c++的template,给使用者提供了另外一种编程范式,这也就导致了template的编程思维模式和面向对象的思维模式的不同,因为其思维的抽象层次不同。这是对掌握面向对象技术的程序员来讲,是一个挑战。
但是,template为了达到它的这种强大,而它的内部的静态编译机制,导致语法上的超级复杂,变成了一个有超级能力的魔兽。就像二战期间希特勒研制的超级大炮,强大,同时庞大。
template用的好,就像玩魔术一般,一小段代码就可以完成一个抽象层面很高的业务逻辑,但是这需要很深的逻辑思考能力,更需要更好的掌握template技术。
但是,template的强大,却无法跟得上lisp语言中的宏。就像一个凡间的英雄,毕竟无法低得上仙界的一个小童。因为,纵然莲花有出淤泥而不染的高洁,却还是不得不生长于淤泥一般。因为c++语言本身的静态性的局限,让template只能在静态编译上穷尽智慧。
如果您看过《深入浅出MFC》这本书,也会被微软的牛人把c的宏用的那么出神入化而惊叹不已,那可是纯粹的文本替换。这一点看法用到template上,也不为过。
上次使用template还是是08、09年,在c++写的服务器中使用过template编写。手头上有一个c++项目,二期需要增加新的硬件支持,业务逻辑比较类似,为了不在业务纵向上增加复杂度,同时尽量保持代码的简洁性,目前来看,template是一个比较好的技术选项。