如何避免在 allocator<T, N> c++17 中重新绑定
How to avoid rebind in allocator<T, N> c++17
在 c++17 之前,如果你有像 Allocator<typename, size_t>
这样的分配器,你可以使用 rebind 结构。
但是现在,在 C++17 中,重新绑定结构已被弃用。
从 allocator<T2, size_t>
构建 allocator<T,size_t>
的解决方案是什么?
您可以使用 std::allocator_traits:
std::allocator_traits<Alloc>::rebind_alloc<T>
有潜力typename
/template
。
只有 std::allocator
的 rebind
成员模板被弃用。如果您使用自己的 class,您仍然可以定义 rebind
.
通过 std::allocator_traits
完成,例如:
using AllocatorForU = std::allocator_traits<AllocatorForT>::template rebind_alloc<U>;
rebind_alloc
和 AllocatorTemplate<T, OtherTypes...>
的默认值是 AllocatorTemplate<U, OtherTypes...>
,适用于 std::allocator
,这就是 std::allocator<T>::rebind
被弃用的原因。你必须为你的 class 定义它,因为它有一个非类型模板参数。
在 c++17 之前,如果你有像 Allocator<typename, size_t>
这样的分配器,你可以使用 rebind 结构。
但是现在,在 C++17 中,重新绑定结构已被弃用。
从 allocator<T2, size_t>
构建 allocator<T,size_t>
的解决方案是什么?
您可以使用 std::allocator_traits:
std::allocator_traits<Alloc>::rebind_alloc<T>
有潜力typename
/template
。
只有 std::allocator
的 rebind
成员模板被弃用。如果您使用自己的 class,您仍然可以定义 rebind
.
通过 std::allocator_traits
完成,例如:
using AllocatorForU = std::allocator_traits<AllocatorForT>::template rebind_alloc<U>;
rebind_alloc
和 AllocatorTemplate<T, OtherTypes...>
的默认值是 AllocatorTemplate<U, OtherTypes...>
,适用于 std::allocator
,这就是 std::allocator<T>::rebind
被弃用的原因。你必须为你的 class 定义它,因为它有一个非类型模板参数。