为什么boost :: dynamic_bitset是一个模板?

时间:2017-09-26 10:11:21

标签: c++ boost boost-dynamic-bitset

我之前使用boost::dynamic_bitset作为boost::dynamic_bitset<>,而没有真正考虑过为什么会模板化。

虽然我可以理解为什么std::bitset被模板化(模板类型用于指定bitset的大小),但我现在遇到了boost::dynamic_bitset<unsigned char>形式的一些代码,我无法想象模板类型的重点是什么。

boost::dynamic_bitset<unsigned char>boost::dynamic_bitset<>的区别如何?在任何情况下都应该使用另一个吗?

1 个答案:

答案 0 :(得分:3)

来自the documentation

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

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

此外,它允许您指定Block类型,这是用于表示一堆位的基础原语。您可能希望根据您所使用的平台或根据您愿意使用的内存来更改块类型(例如,较小的Block类型会减少浪费内存,如果不是所有位都是重要的)