如何避免在allocator <t,n =“”> c ++ 17中重新绑定

时间:2019-01-08 12:59:01

标签: c++ allocator

在c ++ 17之前,如果您有类似Allocator<typename, size_t>的分配器,则可以使用rebind结构。 但是现在,在C ++ 17中,不推荐使用rebind结构。 从allocator<T,size_t>构造allocator<T2, size_t>的解决方案是什么?

2 个答案:

答案 0 :(得分:4)

仅弃用std::allocator的{​​{1}}成员模板。如果您使用自己的类,则仍可以定义rebind

通过std::allocator_traits进行操作,例如:

rebind

{{1}的using AllocatorForU = std::allocator_traits<AllocatorForT>::template rebind_alloc<U>; 的默认值是rebind_alloc,它对AllocatorTemplate<T, OtherTypes...>有用,这就是不推荐使用AllocatorTemplate<U, OtherTypes...>的原因。您必须为您的类定义它,因为它具有非类型模板参数。

答案 1 :(得分:2)

您可以使用std::allocator_traits

std::allocator_traits<Alloc>::rebind_alloc<T>

具有潜在的typename / template