我之前使用boost::dynamic_bitset
作为boost::dynamic_bitset<>
,而没有真正考虑过为什么会模板化。
虽然我可以理解为什么std::bitset
被模板化(模板类型用于指定bitset的大小),但我现在遇到了boost::dynamic_bitset<unsigned char>
形式的一些代码,我无法想象模板类型的重点是什么。
boost::dynamic_bitset<unsigned char>
与boost::dynamic_bitset<>
的区别如何?在任何情况下都应该使用另一个吗?
答案 0 :(得分:3)
template <typename Block, typename Allocator>
class dynamic_bitset { // ...
dynamic_bitset
作为模板的最明显优势是您可以指定自己的Allocator
类型。这可能有很多原因(性能,内存连续性,调试)。 dynamic_bitset
如果内部存储需要增长以容纳更多位,则会通过Allocator
进行分配。
此外,它允许您指定Block
类型,这是用于表示一堆位的基础原语。您可能希望根据您所使用的平台或根据您愿意使用的内存来更改块类型(例如,较小的Block
类型会减少浪费内存,如果不是所有位都是重要的)。