No estoy muy seguro de lo que está preguntando, pero puedo decirle una forma de acceder a bits individuales en un byte, que es quizás lo que hacen los bitsets. Tenga en cuenta que el siguiente código no es mío y es especificación de Microsoft (!).
Crear una estructura como tal:
struct Byte
{
bool bit1:1;
bool bit2:1;
bool bit3:1;
bool bit4:1;
bool bit5:1;
bool bit6:1;
bool bit7:1;
bool bit8:1;
}
El ': 1' parte de este código son campos de bits. http://msdn.microsoft.com/en-us/library/ewwyfdbe(v=vs.80).aspx Define cuántos bits desea que ocupe una variable, por lo que en esta estructura, hay 8 bools que ocupan 1 bit cada uno. En total, la estructura 'Byte' es por lo tanto de 1 byte de tamaño.
Ahora bien, si usted tiene un byte de datos, tales como un char, puede almacenar estos datos en un objeto de bytes de la siguiente manera:
char a = 'a';
Byte oneByte;
oneByte = *(Byte*)(&a); // Get the address of a (a pointer, basically), cast this
// char* pointer to a Byte*,
// then use the reference operator to store the data that
// this points to in the variable oneByte.
Ahora puede acceder (y modificar) los bits individuales accediendo las variables miembro de bool de oneByte. Con el fin de almacenar los datos alterados en un char de nuevo, puede hacerlo de la siguiente manera:
char b;
b = *(char*)(&oneByte); // Basically, this is the reverse of what you do to
// store the char in a Byte.
Voy a tratar de encontrar la fuente de esta técnica, para dar crédito a quien crédito merece.
También, de nuevo, no estoy del todo seguro de si esta respuesta es de alguna utilidad para usted. Interpreté su pregunta como '¿cómo se manejaría el acceso a bits individuales internamente?'.
La pregunta es sobre las clases 'std :: bitset' y' std :: bitset :: reference' de la biblioteca estándar de C++. –
@Matteo Italia: Sé tanto, interpreté la pregunta como si me preguntaran cómo se implementa internamente el acceso de estas clases a los bits. – Rycul