为什么C++0x没有使用查询分配器成员类型的标准C++03接口?在哪些情况下成员类型不足以满足要求?
对于Java程序员而言,在设计模式方面,std::allocator_traits就像是继承自java.lang.CharacterData的package private类CharacterDataLatin1、ChracterData00、CharacterData0E、01、02等,提供了静态Unicode定义和帮助函数,这些函数将被每个Character(即std::allocator)类的实例所共享。
编辑: 通过allocator_traits间接调用自定义分配器的另一个优点是它保证了向前兼容性(见Scoped Allocator Model第3页)。 未来可能会增加要求的数量,即使您不知道如何实现新的要求到您的分配器中,那些要求也已经在编译器制造商实现的allocator_traits中存在。由于C++容器通过allocator_traits间接调用分配器,因此使用您的自定义分配器的STL容器将从新要求中受益,无需您更改代码。
我对这种事情 (完全) 不熟悉,但这个文档似乎是一个很好的起点,可以掌握allocator_traits
背后的原理:
这个提案的关键是定义一个
allocator_traits
模板,其中包含使用分配器的类型和静态成员函数,有效地替换了在Frankfurt丢失的Allocator
概念。
auto p = allocator_traits<Alloc>::allocate(myalloc, n);
而不是auto p = myalloc.allocate(n);
,因为前者最终会调用后者。为什么他们还要添加前者的接口呢? - user283145
std::allocator
继承吗...? - user541686allocator_traits<A>
充当了单个默认类型集合上的享元对象。 - Julien Villemure-Fréchette