Как избежать повторного связывания в allocator <T, N> c ++ 17 - PullRequest
0 голосов
/ 08 января 2019

До c ++ 17, если у вас есть распределитель типа Allocator<typename, size_t>, вы можете использовать структуру перепривязки. Но теперь, в C ++ 17, структура перепривязки устарела. Какое решение построить allocator<T,size_t> из allocator<T2, size_t>?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Только std::allocator s rebind шаблон участника устарел. Если вы используете свой собственный класс, вы все равно можете определить 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 устарело. Вы должны определить его для своего класса, так как он имеет нетипичный параметр шаблона.

0 голосов
/ 08 января 2019

Вы можете использовать std :: allocator_traits :

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

с потенциалом typename / template.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...