я использовал boost::dynamic_bitset
до того как boost::dynamic_bitset<>
, не задумываясь о том, почему это шаблонно.
Хотя я могу понять почему std::bitset
является шаблоном (тип шаблона используется для указания размера набора битов), теперь я столкнулся с некоторым кодом вида boost::dynamic_bitset<unsigned char>
и я не могу понять, в чем смысл типа шаблона.
Как boost::dynamic_bitset<unsigned char>
отличный от boost::dynamic_bitset<>
? Следует ли использовать один поверх другого в любой ситуации?
От документация:
template <typename Block, typename Allocator>
class dynamic_bitset { // ...
Наиболее очевидное преимущество dynamic_bitset
будучи шаблоном, вы можете указать свой собственный Allocator
тип. Это может быть полезно для множества причин (производительность, непрерывность памяти, отладка). dynamic_bitset
выделяет через Allocator
если его внутреннее хранилище должно расти, чтобы вместить больше битов.
Кроме того, он позволяет вам указать Block
тип, который является базовым примитивом, используемым для представления набора битов. Возможно, вы захотите изменить тип блока в зависимости от используемой вами платформы или от того, сколько памяти вы хотите использовать. (например, меньше Block
тип приведет к меньшему расходу памяти, если не все биты значимы).
Других решений пока нет …