- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
为什么没有标准 C++03 接口(interface)用于查询 C++0x 中使用的分配器的成员类型?成员类型不足的用例有哪些?
最佳答案
为了从设计模式的角度解释 allocator_traits,它是 Adapter包装满足更少实现要求的自定义分配器(不需要构造,销毁,所有那些 typedef ...)并将其转换为 FlyWeight使用静态成员和类型为您完成分配器实现要求的其余部分的对象。
根据 open-std doc Scoped Allocator Model 的第 3 页,使用 allocator_traits,您只需为自定义分配器提供至少 10 行代码。 (感谢@icecrime 提及)。
我认为 allocator_traits 和 allocator 是一个很好的现实世界示例,将非 FlyWeight 对象转换为 FlyWeight 以减轻实现细节的负担。它是一个很好的 API 设计实践,可以将一个类转变为本来应该是 FlyWeight 的 FlyWeight。
对于 Java 程序员来说,就设计模式而言,std::allocator_traits 就像包私有(private)类 CharacterDataLatin1, ChracterData00, CharacterData0E, 01, 02 ... 继承自 java.lang.CharacterData 以提供静态 Unicode 定义和帮助器将由 Character (std::allocator) 类的每个实例共享。
编辑:通过 allocator_traits 间接调用自定义分配器的另一个优点是它保证了前向兼容性(Scoped Allocator Model 的第 3 页)。requirements的数量将来可能会增长,即使您不了解对分配器实现新要求,这些要求也已经存在于编译器制造商实现的 allocator_traits 中。知道 C++ 容器通过 allocator_traits 间接调用分配器,使用自定义分配器的 STL 容器将受益于新要求,而无需您更改代码。
关于c++ - C++0x 中 allocator_traits<T> 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4502691/
C++11 提供了 std::allocator_traits 类作为使用分配器的标准方式。静态函数 std::allocator_traits::construct() 将一个指针 指向应该构造对象
using namespace std::rel_ops; template > class my_vector { public: typedef A
如果Allocator符合标准库分配器接口(interface),调用std::allocator_traits::deallocate是否安全用空指针?我知道是什么时候 Allocator是std:
std::allocator_traits当我提供一个带有单个模板参数的分配器的 STL 样式容器时,它会自动发挥它的魔力,但当我提供一个带有两个模板参数但其他方面相似的分配器的 STL 样式容器时,
我想设计一个类模板,它采用分配器类型(如标准第 17.6.3.5 节中所定义)作为模板参数。我怎么看std::allocator_traits有助于填补 A 的任何缺失成员使用默认设置。除此之外,标准
我想定制std::vector不默认构造元素类型的行为(例如 int ),因为对大型 vector 执行此操作的成本很高。 看看这个,我能看到的唯一方法就是专门化 std::allocator_tra
受到 Haskell 的启发,我尝试像这样实现 std::forward_list: namespace std { template > class forward_list {
分配器可以选择嵌套类型,如 pointer , const_pointer .但是可以始终将这些接口(interface)与 std::allocator_traits 一起使用,如果这些类型在 Al
我正在尝试实现一个 STL 风格的容器类,我有一个关于在我的类中使用分配器的问题: STL 的 allocator_traits 中的静态成员函数有何用途? 直到现在,我认为我应该实例化 alloca
我不了解 C++ 11 中的 allocator_traits,所以我尝试了 allocator_traits exmple来自 cplusplus 网站。但是,此代码无法在 gcc 4.9、VS 2
我有一个结构定义为: struct Foo { double x; double y; }; 我有一个将这个结构作为参数的函数: void doSomethingWithFoo(Foo
我很想理解boost::container::allocator_traits当我遇到 boost::container::allocator_traits::is_partially_propaga
下面的代码可以正常编译: #include #include int main() { const int * a = new int(5); std::cout >; auto alloc =
我想这个问题真的是关于 std::allocator_traits 的设计的并提供自定义分配器。如果我想构造一个 std::shared_ptr<>使用自定义分配器,我可以使用 std::alloca
为什么 C++0x 无序关联容器不使用 allocator_traits 来定义它们的成员类型 pointer 和 const_pointer? 例如,顺序关联容器和有序关联容器使用以下定义: typ
我正在尝试重新绑定(bind)我的自定义分配器类型,MyAllocator , 用于 basic_string类,例如: std::basic_string, MyAllocator> ... 分配器
为什么没有标准 C++03 接口(interface)用于查询 C++0x 中使用的分配器的成员类型?成员类型不足的用例有哪些? 最佳答案 为了从设计模式的角度解释 allocator_traits,
根据 http://en.cppreference.com/w/cpp/concept/Allocator ,一个可以用作分配器类型的类必须满足许多要求。但是,我找不到 C++ 标准指定的相同要求。该
我是一名优秀的程序员,十分优秀!