2

我以前用过boost::dynamic_bitsetas boost::dynamic_bitset<>,没有真正考虑过为什么要模板化。

虽然我可以理解为什么std::bitset是模板化的(模板类型用于指定位集的大小),但我现在遇到了一些表单代码,boost::dynamic_bitset<unsigned char>我无法弄清楚模板类型的意义何在。

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

4

1 回答 1

3

文档中

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

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

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

于 2017-09-26T10:15:06.483 回答