为什么boost :: dynamic_bitset模板?
我之前使用boost::dynamic_bitset
作为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
类型会导致浪费较少的内存(如果不是所有位都很重要)。
所以在这种情况下,'unsigned char'意味着它在内部使用一个'unsigned char'数组来存储这些位?但除了内存使用情况外,这不应该与外部有任何区别,对吧? – user2891462
@ user2891462:它对于与现有缓冲区的互操作性也很有用。一个例子见'boost :: to_block_range'。 –
您是否阅读过[文档](http://www.boost.org/doc/libs/1_64_0/libs/dynamic_bitset/dynamic_bitset.html#template-parameters)? – user463035818
@ tobi303我有,但在这种情况下看不到'Block'是什么意思,也不知道为什么有人会使用它。 – user2891462