Определить размер бита при инициализации?

Я хочу сделать битовый набор в С++. Я немного поработал. Все примеры, которые я нашел, например:

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>, который (к сожалению) специализирован для работы в качестве битового набора. Это вызывает много путаницы, и в целом считается плохой идеей. Но так, как это работает, поэтому, если это то, что вам нужно, вы можете использовать его, я полагаю.

Ответ 3

Вы должны проверить boosts dynamic_bitset.

Ответ 4

То, что вы говорите в начале, неверно. "Примеры, которые вы нашли" выглядели не так, как вы писали. Нельзя использовать непостоянное значение для параметризации шаблона. Итак, ваш первый пример недействителен. Только константные выражения могут служить аргументами не-типа для шаблона. То есть аргумент non-type должен быть константой времени компиляции.

Похоже, вы хотите создать битбит, размер которого не является константой времени компиляции. В этом случае шаблон bitset не может быть и речи. Вам нужна реализация битового набора размера времени выполнения. Например, вы можете использовать std::vector<bool> - во многих (если не во всех) реализациях этот шаблон специализирован для реализации упакованного массива булевых значений, где каждый элемент занимает один бит (в отличие от объекта bool).

Ответ 5

bitset требует размера в качестве параметра шаблона, то есть размер должен быть определен во время компиляции. Он не может быть основан на состоянии выполнения, например, на входе пользователя.

Для этого вам нужно изучить std::vector или boost:: dynamic_bitset. std::vector - это специализированный экземпляр шаблона, который использует один бит на элемент. В отличие от битового набора, он может иметь динамический размер.