2017-01-19 2 views
4

Я пытаюсь инициализировать std :: bitset < 256> во время компиляции с некоторыми его индексами, скажем, 50-75 и 200-225 для 1.Инициализация C++ std :: bitset во время компиляции

на основе http://en.cppreference.com/w/cpp/utility/bitset/bitset Это выглядит как мои 2 опции:

constexpr bitset(); 
constexpr bitset(unsigned long long val); 

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

+1

Посмотрите [bitset2] (https://github.com/ClaasBontus/bitset2). –

ответ

0

Вы можете использовать конструктор, который принимает строку в качестве аргумента и инициализирует ее таким образом.

Например. следующая строка, будет инициализировать b с 0000000101111001:

std::bitset<16> b (std::string("0101111001")); 
+5

Конечно, это не конструктор 'constexpr'. OP хочет 'constexpr' для инициализации времени компиляции. – ShadowRanger

1

constexpr bitset(unsigned long long val) BitSet конструктор ограничен в том смысле, что она не может предварительно установить биты из позиции 64 вверх (как беззнаковое долго долго 64 битное значение). Любой немного выше, чем 64 будет инициализирован с 0, как показано в следующем примере (см): bitset constructors

std::bitset<70> bl(ULLONG_MAX); // [0,0,0,0,0,0,1,1,1,...,1,1,1] in C++11 

Если вы хотите инициализировать также высшие биты в конструкторе, я думаю, вы не получите вокруг использовать инициализатор типа string или char*, т. е. конструкторы битов типа (3) или (4).

Конечно, для BitSet длиной 256, строка инициализации получает длинное:

std::bitset<256> myBitset("111100000011111000001110000010101000100000100010010000100000000001111"); 
// I did not count the digits... 
Смежные вопросы