Если вы подумаете об этом, вы не сможете создать представление с произвольным смещением внутри набора битов без некоторого штрафа, поскольку, если оно не выравнивается по границе байта, каждая операция должна сначала сдвинуть все биты, напримерчто они правильно выровнены с битами в другом операнде.
Используете ли вы это по соображениям производительности, памяти или потому, что вам (только) нужны двоичные операции?
Потому что, если это не является критически важным для производительности, я предлагаю вам использовать его вместо этого и назвать его днем:
column_mask column_mask_union(const column_mask & to, const column_mask & with) {
column_mask to2 = to;
column_mask with2 = with;
std::size_t size = with.size() > to.size() ? with.size : to.size();
to2.resize(size);
with2.resize(size);
return to2 | with2;
}
В качестве альтернативы вы можете перезаписать все свои наборы, чтобы иметь одинаковый размер.
Я не думаю, что boost::dynamic_bitset
поддерживает только , используя существующую память.Может быть, есть какая-то другая библиотека, которая позволяет это.