为什么不是标准的C++ 03接口来查询C++ 0x中使用的分配器的成员类型?成员类型不足的用例有哪些?
要根据设计模式解释allocator_traits,它的一个适配器可以包装你的自定义分配器,它满足更少的实现要求(不需要构造,销毁,所有那些typedef ...)并将其转换为完成其余部分的FlyWeight对象.具有静态成员和类型的Allocator实现要求.
使用allocator_traits,您只需要为自定义分配器提供至少10行代码,如open-std doc Scoped Allocator Model的第3页(对于@icecrime提及).
我认为allocator_traits和allocator是将非FlyWeight对象转换为FlyWeight的一个很好的现实示例,以减轻实现细节的负担.它是一个很好的API设计实践,可以将一个类变成FlyWeight,它本来应该是FlyWeight.
对于Java程序员来说,就设计模式而言,std :: allocator_traits就像包私有类CharacterDataLatin1,ChracterData00,CharacterData0E,01,02 ......继承自java.lang.CharacterData以提供静态Unicode定义和助手.由Character(std :: allocator)类的每个实例共享.
编辑:通过allocator_traits间接调用自定义分配器的另一个好处是它保证了foward兼容性(Scoped Allocator Model的第3页).未来的需求数量可能会增长,即使您对分配器实现新需求一无所知,这些需求也已经存在于编译器制造商实现的allocator_traits中.知道C++容器通过allocator_traits间接调用allocator,使用自定义分配器的STL容器将从新需求中受益,而无需更改代码.