Я хотел бы предоставить индивидуальный
select_on_container_copy_construction()
http://www.cplusplus.com/reference/memory/allocator_traits/select_on_container_copy_construction/
для моего распределителя.
Я попытался добавить его прямо в свой класс распределителя следующим образом:
T select_on_container_copy_construction( const T& a ) const {
...
}
но это не называется.
Я попытался реализовать это как черту типа:
namespace std {
template<class T>
struct allocator_traits<static_allocator<T>> {
typedef T value_type;
};
}
но теперь мне нужно реализовать и все остальные особенности.
Есть ли более простой способ просто перезаписать эту функцию без предоставления полного allocator_traits?
Полный пример кода можно найти здесь: https://onlinegdb.com/H1iJJIN1N
Пробовал разные варианты добавления в функцию static / const.
@ sturcotte06 это static в свойствах распределителя, а не в самом типе распределителя
@PiotrSkotnicki: Добавлен пример полного кода. Спасибо!
@PiotrSkotnicki: Отлично! Спасибо. Думаю, я должен был сосредоточиться на документации. Я приму это как ответ, если вы опубликуете его как таковой. Еще раз спасибо!





Именованное требование Распределитель[allocator.requirements] предполагает следующий синтаксис вызова:
a.select_on_container_copy_construction()
и ожидает, что возвращаемый тип будет типом распределителя.
Вы объявляете дополнительный параметр (const T& a), который делает приведенный выше вызов некорректным, заставляя std::allocator_traits вернуться к реализации dafault (возвращая экземпляр распределителя) [allocator.traits]:
static Alloc select_on_container_copy_construction(const Alloc& rhs);Returns:
rhs.select_on_container_copy_construction()if that expression is well-formed; otherwise,rhs.
static allocator_type select_on_container_copy_construction (const allocator_type& alloc);Ваш не статичен, а константен.