那么现在,我们欲查找 int_node 中的某一个特定值,我们不需要在重复编写任何代码了,我们可以重复利用 find,将查找动作写成单一函数调用:
find(node_wrap<int_node>(list_head),node_wrap<int_node>(),val);其中第二个参数 node_wrap
外覆类做了什么?他将我们原始的结点指针包装了起来,同时定义或重载了一些操作,使得整个外覆类对外显示出一个指针常见的操作接口,以便其他的组件可以透明的将他作为一个指针来使用。而因不同的数据组织方法而形成指针操作差异将由外覆类负责包装和隐藏,并由他在类的内部将这种差异进行具体的实现,导致最终的结果是,他将原本有差异的事物,统一了起来。
带来的好处是什么?
在考虑他带来的好处之前,我们先想想没有他是怎样的情况。如果没有外覆类的包装,每当我们实现一个概念上相同的数据结构时,我们要将所有在这个数据结构上存在的算法实现一遍,即便已经存在相同概念的模型的算法,但是由于数据的组织方式不同存在的一些差异,我们不能重用这些算法。
外覆类带来的好处显而易见的是我们可以重用已经实现过的算法。而得以实现这一点的关键就在于外覆类消除了差异性,对外提供了统一的接口,而差异性越少,我们能重复利用的部分就越多。