Говорить, что бит-поля имеют некоторые скрытые преимущества, к сожалению, далеки от истины, по моему мнению, было бы лучше выразить скрытые недостатки их использования.
Чтобы ответить на ваш вопрос; да, конечно, вы можете написать свои собственные алгоритмы для обработки этих бит-полей произвольной длины как нечто совершенно другое.
Хотя нет способа получить длину поля m_bitfield1
(используя макрос или что-то еще), вам нужно будет отслеживать это самостоятельно.
Как примечание стороны нет ничего о том, что ниже структура будет 1 байт в размере:
struct Obj {unsigned bitfield1 : 3; unsigned bitfield2 : 5;}; // 8 bits total
Это происходит из-за потенциального дополнения после структуры, а также между двумя если вам действительно не повезло.
С ++ Стандартный (Проект n1905): 9.6/1 Битовые поля
Распределение битовых полей внутри объекта класса определяется реализацией.
Выравнивание битовых полей определяется реализацией.
Чтение/Доступ к этим видам членов также может быть падение, большинство компиляторов сегодня могут оптимизировать эти инструкции, чтобы быть довольно быстро, хотя нет ничего о том, что это будет так, и это может создать много времени выполнения, если компилятор не думает так же, как и вы.
Порядок которой битовые поля будут появляться в памяти также определяется реализация, что может привести к непереносимой коде, который не может привести к одной и тем же вещам на два разных системах.
C++ Standard (проект n1905): 9,6/1 [Примечание: *] Битовые поля
битовых полей оседлать единиц распределения на некоторых машинах, а не на других.Бит-поля назначаются справа налево на некоторых машинах, слева направо на других.
Я безумно заблуждался в этом блоге на прошлой неделе и нашел его здесь по чистой случайности. Большое спасибо. – pmr
@pmr: Я изменил название в надежде, что ваш безумный googling, скорее всего, найдет ответ в следующий раз. :-) – Omnifarious