#c #c 17 #allocator
Вопрос:
Я читаю некоторый код на C и специально пытаюсь понять настраиваемый контейнер.
Контейнер имеет следующие параметры шаблона:
template<typename T, typename Alloc>
class container{ ... };
Где T
находится тип данных, таких как float
или int
. Он Alloc
является распределителем и может быть одной из стандартных библиотек.
В этом контейнере я нахожу следующее:
class Container{ ....
template<typename NewType>
struct Rebind
{
using newalloc = typename std::allocator_traits<Alloc>::template rebind_alloc<NewType>;
using Other = container<NewType, newalloc>
}
}
Я нигде не нахожу член структуры Rebind
, используемый явно, по крайней мере, и я изо всех сил пытаюсь понять его назначение.
Чего разработчик пытается достичь, имея структуру внутри контейнера?
Ответ №1:
Это не элемент данных. Это элемент шаблона, который позволяет коду (который, вероятно, сам является шаблоном) получать другой тип контейнера с аналогичным распределителем.
например, применение функции к каждому элементу для получения нового контейнера результатов
template <typename Container, typename Function, typename Result = typename Container::template Rebind<std::invoke_result_t<Function, typename Container::const_reference>>::Other>
Result transform(const Container amp; container, Function function)
{
Result result(container.get_allocator());
for (auto amp; element : container) { result.push_back(function(element); }
return resu<
}