2017-09-26 96 views
2

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

尽管我可以理解为什么std::bitset是模板化的(模板类型用于指定位集的大小),但现在我遇到了一些形式为boost::dynamic_bitset<unsigned char>的代码,我无法弄清楚模板的要点类型。

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

+2

您是否阅读过[文档](http://www.boost.org/doc/libs/1_64_0/libs/dynamic_bitset/dynamic_bitset.html#template-parameters)? – user463035818

+0

@ tobi303我有,但在这种情况下看不到'Block'是什么意思,也不知道为什么有人会使用它。 – user2891462

回答

3

the documentation

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

dynamic_bitset是一个模板,最明显的好处是,你可以指定自己的Allocator类型。这对于许多原因(性能,内存邻接,调试)可能是有用的。如果其内部存储需要增长以容纳更多位,dynamic_bitset确实通过Allocator分配。

此外,它允许您指定一个Block类型,它是用于表示一串位的基础原语。您可能需要根据所使用的平台更改块类型,或者取决于您愿意使用多少内存(例如,较小的Block类型会导致浪费较少的内存(如果不是所有位都很重要)

+0

所以在这种情况下,'unsigned char'意味着它在内部使用一个'unsigned char'数组来存储这些位?但除了内存使用情况外,这不应该与外部有任何区别,对吧? – user2891462

+3

@ user2891462:它对于与现有缓冲区的互操作性也很有用。一个例子见'boost :: to_block_range'。 –