2017-09-26 4 views
2

私はboost::dynamic_bitsetboost::dynamic_bitset<>として以前に使用しましたが、それがなぜテンプレート化されているのかは実際には考えていません。 std::bitsetがテンプレートである理由私は理解することができますがboost :: dynamic_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私は持っていますが、この文脈では「ブロック」が何を意味するのか、なぜ誰かがそれを使用するのかを見ることはできません。 – 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'sの配列を内部的に使用してビットを格納することを意味しますか?しかし、これは、メモリの使用とは別に、外部との違いはありませんか? – user2891462

+3

@ user2891462:既存のバッファとの相互運用性にも役立ちます。例については、 'boost :: to_block_range'を参照してください。 –

関連する問題