Почему 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
тип приведет к меньшему расходу памяти, если не все биты значимы).