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

Я хочу сделать bitset в C++. Я провел немного исследования. Все примеры я нашел где как это:

bitset<6> myBitset;
// do something with it

Но я не знаю размера bitset, когда я определяю переменную в своем классе:

#include <bitset>
class Test
{
public:
     std::bitset *myBitset;
}

Это не скомпилирует...

И инициализация как это также не работает:

int size = getDependentSizeForBitset();
myBitset = new bitset<size>();
22
задан Lightness Races with Monica 6 April 2017 в 21:24
поделиться

5 ответов

Boost имеет dynamic_bitset , который вы можете использовать.

В качестве альтернативы вы можете использовать вектор , который (к сожалению) специализирован для работы в качестве битового набора. Это вызывает много недоразумений и в целом считается плохой идеей. Но вот как это работает, так что, если это то, что вам нужно, я полагаю, вы можете его использовать.

22
ответ дан 29 November 2019 в 05:21
поделиться

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

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

0
ответ дан 29 November 2019 в 05:21
поделиться
7
ответ дан 29 November 2019 в 05:21
поделиться

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

1
ответ дан 29 November 2019 в 05:21
поделиться

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

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

1
ответ дан 29 November 2019 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: