Определить размер бита при инициализации?
Я хочу сделать битовый набор в С++. Я немного поработал. Все примеры, которые я нашел, например:
bitset<6> myBitset;
// do something with it
Но я не знаю размер бита, когда я определяю переменную в своем классе:
#include <bitset>
class Test
{
public:
std::bitset *myBitset;
}
Это не скомпилируется...
И инициализация вроде этого также не работает:
int size = getDependentSizeForBitset();
myBitset = new bitset<size>();
Ответы
Ответ 1
Boost имеет dynamic_bitset
, который вы можете использовать.
В качестве альтернативы вы можете использовать vector<bool>
, который (к сожалению) специализирован для работы в качестве битового набора. Это вызывает много путаницы, и в целом считается плохой идеей. Но так, как это работает, поэтому, если это то, что вам нужно, вы можете использовать его, я полагаю.
Ответ 2
Используйте Boost:: dynamic_bitset
Ответ 3
Вы должны проверить boosts dynamic_bitset.
Ответ 4
То, что вы говорите в начале, неверно. "Примеры, которые вы нашли" выглядели не так, как вы писали. Нельзя использовать непостоянное значение для параметризации шаблона. Итак, ваш первый пример недействителен. Только константные выражения могут служить аргументами не-типа для шаблона. То есть аргумент non-type должен быть константой времени компиляции.
Похоже, вы хотите создать битбит, размер которого не является константой времени компиляции. В этом случае шаблон bitset
не может быть и речи. Вам нужна реализация битового набора размера времени выполнения. Например, вы можете использовать std::vector<bool>
- во многих (если не во всех) реализациях этот шаблон специализирован для реализации упакованного массива булевых значений, где каждый элемент занимает один бит (в отличие от объекта bool
).
Ответ 5
bitset требует размера в качестве параметра шаблона, то есть размер должен быть определен во время компиляции. Он не может быть основан на состоянии выполнения, например, на входе пользователя.
Для этого вам нужно изучить std::vector или boost:: dynamic_bitset. std::vector - это специализированный экземпляр шаблона, который использует один бит на элемент. В отличие от битового набора, он может иметь динамический размер.