14.4.3  广义配置器

14.4.3 广义配置器

配置器是通过模板参数向容器传递信息的一种简化变形。容器中的每个元素均通过容器的分配器进行分配。若允许两个同类型的list采用不同的分配器,splice()无法通过重新链接的方式实现。将splice()定义成基于元素复制,以防出现偶发情况。若允许配置器完全通用,则一个配置器能为任意类型的分配元素的rebind机制做得更加精细一些。标准配置器被假定为不在每个对象里存放数据,标准的实现可以利用该情况。

反对配置器在对象内存放信息的限制实际不是很严重。大部分配置器不需要在对象内存放数据。配置器可以保存有关配置器类型的数据。若需要各种数据,可以使用各种配置器类型。

配置器不允许在每个对象里存放数据的限制是强制性的。由于标准库在运行时间和空间效率上要求比较严格,因此当标准库在效率方面的限制不是很重要时,可以采用配置器技术。配置器还可以携带某一类信息,该信息从公共基类继承而来的。

配置器可以为容器提供一种控制,使容器的行为类似持续性存储器工作的高速缓存存储器,或者提供容器与其他对象之间的关联。

按照此方式,任何服务可能以常规容器操作透明的形式提供。最好的做法是将有关数据存储的问题和数据使用的问题分开,后面不属于某个广义的配置器,但可通过单独的模板参数提供。