2017-09-26 120 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'。 –