【问题标题】:Why is boost::dynamic_bitset a template?为什么 boost::dynamic_bitset 是模板?
【发布时间】:2017-09-26 10:11:20
【问题描述】:

我之前将boost::dynamic_bitset 用作boost::dynamic_bitset<>,但没有真正考虑过为什么要进行模板化。

虽然我可以理解为什么std::bitset 是模板化的(模板类型用于指定bitset 的大小),但我现在遇到了boost::dynamic_bitset<unsigned char> 形式的一些代码,我不知道这是什么意思模板类型。

boost::dynamic_bitset<unsigned char> 与 boost::dynamic_bitset<> 有何不同?在任何情况下都应该使用其中的一种吗?

【问题讨论】:

  • 你读过the documentation吗?
  • @tobi303 我有,但看不到 Block 在这种情况下的含义,也不知道为什么有人会使用它。

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


【解决方案1】:

来自the documentation:

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

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

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

【讨论】:

  • 那么在这种情况下,unsigned char 意味着它在内部使用unsigned chars 的数组来存储位?但这应该与外部没有任何区别,除了内存使用,对吧?
  • @user2891462:它对于与现有缓冲区的互操作性也很有用。有关示例,请参见 boost::to_block_range。
猜你喜欢
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2015-09-09
  • 1970-01-01
相关资源
最近更新 更多