Почему boost::dynamic_bitset является шаблоном?

Я использовал boost::dynamic_bitset до того как boost::dynamic_bitset<>, не задумываясь о том, почему это шаблонно.

Хотя я могу понять почему std::bitset является шаблоном (тип шаблона используется для указания размера набора битов), теперь я столкнулся с некоторым кодом вида boost::dynamic_bitset<unsigned char> и я не могу понять, в чем смысл типа шаблона.

Как boost::dynamic_bitset<unsigned char> отличный от boost::dynamic_bitset<>? Следует ли использовать один поверх другого в любой ситуации?

1 ответ

Решение

Из документации:

template <typename Block, typename Allocator>
class dynamic_bitset { // ...

Наиболее очевидное преимущество dynamic_bitset будучи шаблоном, вы можете указать свой собственный Allocator тип. Это может быть полезно по ряду причин (производительность, непрерывность памяти, отладка). dynamic_bitset выделяет через Allocator если его внутреннее хранилище должно расти, чтобы вместить больше битов.

Кроме того, он позволяет вам указать Block тип, который является базовым примитивом, используемым для представления набора битов. Возможно, вы захотите изменить тип блока в зависимости от платформы, на которой вы работаете, или в зависимости от того, сколько памяти вы хотите использовать (например, меньший размер). Block тип приведет к меньшему расходу памяти, если не все биты значимы).

Другие вопросы по тегам