2014-01-24 2 views
4

Чтобы определить BitSet с 16 битами, то это будет, как:Почему битрейт реализуется шаблоном?

std::bitset<16> bs(0x123); 

Если позвольте мне создать класс BITSET, я, вероятно, сделать это следующим образом:

mine::bitset bs(16, 0x123); 

Есть ли причина, по которой std :: bitset реализуется шаблоном?

Это хороший образец, который мы должны применять в некоторых ситуациях?

+0

Один из них является статическим битрейтом, другой - динамическим. Если вы уже знаете нужный размер, почему бы вам не воспользоваться этими знаниями? –

+0

Другими словами: Когда вы решаете покупать и кормить свою семью, вы бы предпочли пойти и купить необходимую сумму, или вы бы каждый день ждали дома, пока все не будут дома, не посчитают их, не запереть в мьютекс , ходить по магазинам за вычисленное количество членов семьи, а затем готовить? Это более гибко, если вы произвольно создаете и теряете детей. –

ответ

4

Есть ли причина, по которой std :: bitset реализуется шаблоном? Является ли это хорошей моделью, которую мы должны применять в некоторых ситуациях?

Поскольку std::bitset предназначен быть статический BitSet. В некоторых случаях размер времени компиляции будет очень полезен, особенно для компилятора, для оптимизации вашей программы. Если вы хотите установить динамический набор, вы можете использовать boost::dynamic_bitset. Как и в случае с std::array и std::vector, всегда есть место для контейнеров статического размера и контейнеров с динамическим размером.

+0

Благодарим за упоминание 'std :: array'. Похоже, что лучше использовать контейнер статического размера, если контейнер с меньшей вероятностью изменит его размер. – Deqing

Смежные вопросы