为什么 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<>
有何不同?在任何情况下都应该使用一个吗?
template <typename Block, typename Allocator>
class dynamic_bitset { // ...
dynamic_bitset
作为模板最明显的优点是您可以指定自己的 Allocator
类型。由于多种原因,这可能很有用 (性能、内存连续性、调试)。 dynamic_bitset
如果其内部存储需要增长以容纳更多位,则通过 Allocator
进行分配。
此外,它允许您指定一个 Block
类型,这是用于表示一堆位的底层原语。您可能希望根据您所在的平台或您愿意使用的内存量 更改块类型(例如,较小的 Block
类型会导致更少的内存浪费,如果并非所有位都有意义).
我以前用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
类型会导致更少的内存浪费,如果并非所有位都有意义).