为什么 boost::dynamic_bitset 是模板?

Why is boost::dynamic_bitset a template?

我以前用boost::dynamic_bitset作为boost::dynamic_bitset<>,没有真正考虑为什么它是模板化的。

虽然我可以理解为什么 std::bitset 是模板化的(模板类型用于指定位集的大小),但我现在遇到了一些 boost::dynamic_bitset<unsigned char> 形式的代码,我不能'搞不懂模板类型有什么意义

boost::dynamic_bitset<unsigned char>boost::dynamic_bitset<> 有何不同?在任何情况下都应该使用一个吗?

来自the documentation

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

dynamic_bitset 作为模板最明显的优点是您可以指定自己的 Allocator 类型。由于多种原因,这可能很有用 (性能、内存连续性、调试)dynamic_bitset 如果其内部存储需要增长以容纳更多位,则通过 Allocator 进行分配。

此外,它允许您指定一个 Block 类型,这是用于表示一堆位的底层原语。您可能希望根据您所在的平台或您愿意使用的内存量 更改块类型(例如,较小的 Block 类型会导致更少的内存浪​​费,如果并非所有位都有意义).