如何避免在 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::allocatorrebind 成员模板被弃用。如果您使用自己的 class,您仍然可以定义 rebind.

通过 std::allocator_traits 完成,例如:

using AllocatorForU = std::allocator_traits<AllocatorForT>::template rebind_alloc<U>;

rebind_allocAllocatorTemplate<T, OtherTypes...> 的默认值是 AllocatorTemplate<U, OtherTypes...>,适用于 std::allocator,这就是 std::allocator<T>::rebind 被弃用的原因。你必须为你的 class 定义它,因为它有一个非类型模板参数。